我有一个.NET客户端,可以为我的集线器类创建一个代理。当托管该集线器的服务器停机时间足够长时,客户端将进入断开状态。我想在调用hub方法之前检查代理是否处于断开连接状态,而不是仅仅尝试调用hub方法,然后在错误状态下捕获错误。
在Visual Studio中进行调试时,我可以看到IHubProxy
对象具有指示当前状态的基本属性State
。当它工作正常时它表示已连接,并且当它已断开连接时显示已断开连接。但是,我似乎无法访问此属性。
有谁知道是否有办法告诉?理想情况下,我只想做这样的事情:
if (hubProxy.State == ConnectionState.Disconnected)
{
this.AttemptReconnection();
}
if (hubProxy.State == ConnectionState.Connected)
{
await hubProxy.Invoke("MyMethod", myMethodArgs);
}
答案 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);
}
}