首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >未调用OWIN

未调用OWIN
EN

Stack Overflow用户
提问于 2019-09-13 12:34:44
回答 1查看 194关注 0票数 8

我正在使用作为托管的C# Web和Owin来公开读卡器实用程序。

我正在尝试使用服务器发送的事件。客户端发送一个打开流的请求,我希望在它关闭时执行逻辑(即用户关闭浏览器,或调用eventSource.close())。

看起来是这样:

代码语言:javascript
复制
public class CardReaderController: ApiController
{
    static ConcurrentDictionary<int, Connection> connections = new ConcurrentDictionary<int, Connection>();
    static CardReader cardReader = CardReader.Instance;

    CardReaderController() 
    {
        cardReader.OnCardRead += OnCardRead;
    }

    static void OnDisconnect(int id)
    {
        connections.TryRemove(id, out var connection);
        connection.Writer.Close();
    }

    static void OnCardRead(string cardData)
    {
        foreach(var connection in connections.Values)
            connection.Writer.WriteLine("data: " + cardData + "\n")
    }

    [HttpGet]
    public HttpResponseMessage Events(CancellationToken onDisconnect) 
    {
        ...
        int id = Request.GetHashCode();
        var response = Request.CreateResponse();
        onDisconnect.Register(() => OnDisconnect(id));

        Response.Content = new PushStreamContent((stream, content, context) => 
        {
            var connection = new Connection(new StreamWriter(stream){ AutoFlush = true });

            connection.Writer.WriteLine("data: connection started\n");
            connections.TryAdd(id, connection);
        }, "text/event-stream");

        return response;
    }
}

在本地主机上进行测试时,一切都完全按照预期工作。

但是,当部署到另一个域并发出来自该域的请求时,取消令牌不会被调用,也不会到达OnDisconnect

另一个奇怪的奇怪之处是,有时,当一张卡片被读取时(并导致OnCardRead触发),在执行OnCardRead之后,它确实会到达OnDisconnect

在终止服务时也会发生这种情况。

似乎取消令牌确实会得到通知,但只有当另一个线程正在执行代码时才会通知?但是为什么只有在从另一个主机发送请求时才会发生这种情况呢?

有谁能解释(和解决)这种奇怪的行为吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-09-17 16:16:39

事实证明,问题实际上在于部署的版本使用了一个有角度的服务工作人员,这会导致流请求(链接)上的问题,并且与服务器无关。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57923761

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档