2017-05-18 2 views
1

Ich habe einen .NET-Client, der einen Proxy für meine Hub-Klasse erstellt. Wenn der Server, der diesen Hub hostet, lange genug ausfällt, wechselt der Client in einen getrennten Status. Ich möchte überprüfen, ob sich der Proxy in einem getrennten Zustand befindet, bevor ich eine Hub-Methode aufruft, anstatt nur die Hub-Methode aufzurufen und den Fehler dann abzufangen, wenn er sich in einem getrennten Zustand befindet.Gibt die SignalR IHubProxy-Schnittstelle alle Eigenschaften frei, die angeben, dass der Client nicht verbunden ist?

Beim Debuggen in Visual Studio kann ich sehen, IHubProxy Objekt hat eine Basiseigenschaft State, die den aktuellen Zustand anzeigt. Es steht Connected, wenn es funktioniert, und es heißt Disconnected, wenn es getrennt ist. Ich kann jedoch nicht auf diese Eigenschaft zugreifen.

Weiß jemand, ob es eine Möglichkeit gibt, zu erzählen? Im Idealfall würde ich nur so etwas zu tun:

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

Antwort

1

Ich erkennen, dass die HubConnection Klasse ist das, was ich wollte. Ich hatte diese Klasse vergessen, weil ich eine Proxy-Serviceklasse speziell für die Erstellung eines Proxy für den Hub hatte, und ich machte es nur seine IHubProxy-Eigenschaft verfügbar, da das vom Client verwendet wird, um Hub-Methoden aufzurufen. Durch die Offenlegung seiner HubConnection Eigenschaft ist der Client in der Lage, den Status zu überprüfen.

Aus Gründen der Vollständigkeit dieser Antwort, ist es das, was die nackten Knochen meines Client-Code wie folgt aussieht:

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); 
    } 
} 
Verwandte Themen