Javascript ASP dotnet core webApp:SignalR websocket onclose()在请求后立即调用
我只是从asp dotnet核心web应用程序中的SignalR开始,并试图获得基本的理解 我已经用一个空项目完成了来自微软的示例,效果很好。然后我尝试将相同的教程集成到现有的web应用程序中。但是在那里,我只能向服务器发送一个请求。收到响应后,页面内容将按预期更新。但是,Javascript ASP dotnet core webApp:SignalR websocket onclose()在请求后立即调用,javascript,c#,asp.net-core,signalr,Javascript,C#,Asp.net Core,Signalr,我只是从asp dotnet核心web应用程序中的SignalR开始,并试图获得基本的理解 我已经用一个空项目完成了来自微软的示例,效果很好。然后我尝试将相同的教程集成到现有的web应用程序中。但是在那里,我只能向服务器发送一个请求。收到响应后,页面内容将按预期更新。但是,connection.invoke(…).catch(…)上的错误处理程序立即被调用,其中包含以下信息:error:invokation已取消,因为基础连接已关闭 调用堆栈将我指向signal.js中的webSocket.on
connection.invoke(…).catch(…)
上的错误处理程序立即被调用,其中包含以下信息:error:invokation已取消,因为基础连接已关闭
调用堆栈将我指向signal.js
中的webSocket.onclose
函数,但我看不出引发相应事件的原因
将signar.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
参数为null,但this.Context.ConnectionAborted.IsCancellationRequested
为true
。
调用OnDisconnectedAsync(…)
发生在JS客户端函数成功执行后,结果没有任何问题
由于它在一个全新的项目中工作,我确信它与我现有的web应用程序中的某些内容有关。但我完全不知道它可能是什么。
我已经注释掉了Startup.cs
中的所有其他内容,并从页面中排除了所有其他JS脚本以进行测试,以避免任何副作用。我现在应该有与示例中基本相同的设置。但这种行为并没有改变
我不希望有具体的解决方案,因为这可能是一个非常具体的问题。但是,如果有人知道我应该从哪里开始寻找问题,这已经很有帮助了
编辑:
在进一步研究并调试
signal.js
之后,我发现webSocket.onclose(event)
是在processIncomingData(…)
函数完成后调用的。事件代码为1000,根据平均值正常关闭
。但是我仍然找不到谁发起了关闭调用…Hi@Buchter你调用了哪个hub方法,你能告诉我们吗?我从ChatHub
调用SendMessage
方法,就像在MS示例中一样。然后在我的JavaScript中的ReceiveMessage
处理程序中对结果进行评估。然后断开连接。您好@Buchter,您调用了哪个集线器方法,您能告诉我们吗?我从ChatHub
调用SendMessage
方法,就像在MS示例中一样。然后在我的JavaScript中的ReceiveMessage
处理程序中对结果进行评估。然后断开连接。