gpt4 book ai didi

c# - 响应服务器请求时 SignalR "Start must be called before data can be sent"

转载 作者:行者123 更新时间:2023-11-30 19:37:25 25 4
gpt4 key购买 nike

我有一些 SignalR 客户端代码在收到服务器请求后调用服务器方法:

        var connection = new HubConnection(_hubAddress);
var hubProxy = _hubConnection.CreateHubProxy(HubName);
connection.Start().Wait(TimeSpan.FromMinutes(1));
...

hubProxy.On("Client_Method", (string callerId, string requestIdentifier) =>
{
if (connection.State == ConnectionState.Connected)
{
// error hapening on the invoke call here, despite
// the connection state being connected.
// Do I need to call Start here?
hubProxy.Invoke("Proxy_Method_Callback", callerId, requestIdentifier);
}
});

但是它抛出一个异常:

InvalidOperationException: Data cannot be sent because the connection is in the disconnected state. Call start before sending any data.

但是如果 hubProxy 已连接并打开以接收请求,为什么它在调用时出错?

最佳答案

我发现您在 proxy.On() 处理程序中调用某些内容时出错,这真的很奇怪,因为该处理程序将从服务器端执行,因此您已连接。您确定您在该行而不是其他任何地方得到了错误吗?

简短说明:

SignalR 不处理断开连接。你需要自己处理它们

详细解释:

当您的客户端失去连接时,SignalR 将尝试重新连接大约 20 秒。状态为 reconnecting。在那段时间之后,它会进入断开连接状态并且不会再连接。

要处理这种情况,您必须监听连接状态变化,并在状态 == 断开时重新连接。我发现在执行此操作时最好创建一个新的集线器连接,否则您可能会遇到各种异常和奇怪的行为。

如果您在断开连接的状态下调用任何方法,您的应用程序将崩溃,因此我建议始终在调用时使用 try/catch。

通常您会希望在重新建立连接后重新调用失败的调用。

我写了一个class helper处理所有提到的逻辑。它在 ios/android 设备上经过了很好的测试。

关于c# - 响应服务器请求时 SignalR "Start must be called before data can be sent",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38090032/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com