首页 > 解决方案 > ASP dotnet core webApp:请求后立即调用 SignalR websocket onclose()

问题描述

我刚开始在 ASP dotnet 核心网络应用程序中使用 SignalR,并尝试获得基本的了解。

我已经完成了 Microsoft 的入门示例,其中包含一个空项目,并且效果很好。然后我尝试将相同的教程集成到现有的 Web 应用程序中。但是在那里,我只能向服务器发送一个请求。收到响应后,页面内容按预期更新。connection.invoke(...).catch(...)但是随后立即使用以下信息调用错误处理程序:Error: Invocation canceled due to the underlying connection being closed

调用堆栈将我指向中的webSocket.onclose函数,signalr.js但我不明白为什么会引发相应的事件。

将 SignalR.js LogLevel 设置为后,来自服务器和客户端的完整调试信息Trace为:

[2020-12-17T16:03:21.698Z] Trace: (WebSockets transport) sending data. String data of length 76.
[2020-12-17T16:03:21.701Z] Trace: (WebSockets transport) data received. String data of length 60.
Microsoft.AspNetCore.Routing.EndpointMiddleware: Information: Executed endpoint '/chathub'
Microsoft.AspNetCore.Hosting.Diagnostics: Information: Request finished in 6917.5314ms 101 
[2020-12-17T16:03:21.709Z] Trace: (WebSockets transport) socket closed.
[2020-12-17T16:03:21.709Z] Debug: HttpConnection.stopConnection(undefined) called while in state Connected.
[2020-12-17T16:03:21.710Z] Information: Connection disconnected.
[2020-12-17T16:03:21.710Z] Debug: HubConnection.connectionClosed(undefined) called while in state Connected.
Error: Invocation canceled due to the underlying connection being closed.

此后,我可以重新连接,并且该连接再次针对一个请求起作用。但这不能成为解决方案。

我已经OnDisconnectedAsync(Exception exception)在服务器上覆盖并为其设置了断点。exception参数为空,但this.Context.ConnectionAborted.IsCancellationRequestedtrue. OnDisconnectedAsync(...)在结果的 JS 客户端函数已成功执行且没有任何问题的情况下发生调用。

由于它适用于一个干净的新项目,我确信它与我现有的网络应用程序中的某些东西有关。但我完全不知道它可能是什么。我已经注释掉了所有其他内容,Startup.cs并从页面中排除了所有其他 JS 脚本以进行测试以避免任何副作用。我现在应该具有与示例中基本相同的设置。但行为没有改变。

我不期待具体的解决方案,因为这可能是一个非常具体的问题。但是,如果有人知道我应该从哪里开始寻找问题,那已经很有帮助了。

编辑: 在进一步调查和调试之后,signalr.js我发现webSocket.onclose(event)processIncomingData(...)函数完成后调用它并且没有错误。事件代码是 1000,根据Mozilla Developer Docs的意思Normal Closure。但我仍然找不到谁发起了近距离通话......

标签: javascriptc#asp.net-coresignalr

解决方案


推荐阅读