SignalR IHubProxy接口是否公开了指示客户端处于断开连接状态的任何属性?

时间:2017-05-18 20:45:54

标签: c# .net signalr

我有一个.NET客户端,可以为我的集线器类创建一个代理。当托管该集线器的服务器停机时间足够长时,客户端将进入断开状态。我想在调用hub方法之前检查代理是否处于断开连接状态,而不是仅仅尝试调用hub方法,然后在错误状态下捕获错误。

在Visual Studio中进行调试时,我可以看到IHubProxy对象具有指示当前状态的基本属性State。当它工作正常时它表示已连接,并且当它已断开连接时显示已断开连接。但是,我似乎无法访问此属性。

有谁知道是否有办法告诉?理想情况下,我只想做这样的事情:

if (hubProxy.State == ConnectionState.Disconnected)
{
    this.AttemptReconnection();
}
if (hubProxy.State == ConnectionState.Connected)
{
    await hubProxy.Invoke("MyMethod", myMethodArgs);
}

1 个答案:

答案 0 :(得分:1)

我意识到HubConnection课程是我想要的。我忘记了那个类,因为我有一个专门用于创建集线器代理的代理服务类,我让它只暴露它的IHubProxy属性,因为这是客户端用来调用集线器方法的。通过公开其HubConnection属性,客户端也能够检查状态。

为了完整答案,这就是我的客户端代码的基本内容:

private void ConnectToHub()
{
    try
    {
        // this is a method in the proxy service class that tries to connect to the hub
        // it returns true if it was able to connect successfully
        this.connected = hubProxyService.AttempConnectionToHub();
        if (this.connected)
        {
            this.hubProxy = hubProxyService.HubProxy;
            this.hubConnection = hubProxyService.HubConnection
        }
    }
    catch
    {
        this.connected = false;
    }
}

private void MyMethodThatInvokesHubMethod()
{
    // Do some stuff
    // ...
    // ...
    // ...
    if (this.hubConnection.State == ConnectionState.Disconnected)
    {
        this.ConnectToHub();
    }
    if (this.hubConnection.State == ConnectionState.Connected)
    {
        await this.hubProxy.Invoke("MyHubMethod", hubMethodArgs);
    }
}