2016-11-15 36 views
2

SignalR HubをホストするAzure Web Appを再起動した後、異常な再接続が発生することがあります。再起動すると、アプリケーションがDisconnectTimeout(2分でテスト済み)未満で再起動しても、クライアントは再接続しません。Azure Webアプリケーションの再起動後にSignalRが再接続する

何か間違っていますか?

ハブコード

public class PingHub : Hub 
{ 
    public void Hello() 
    { 
     Clients.All.hello(); 
    } 

    public override Task OnReconnected() 
    { 
     Trace.WriteLine("Reconnect"); 
     return base.OnReconnected(); 
    } 

    public override Task OnConnected() 
    { 
     Trace.WriteLine("Connect"); 
     return base.OnConnected(); 
    } 

} 

クライアントコード

var hubConnection = new HubConnection("http://url/"); 


      hubConnection.TraceLevel = TraceLevels.All; 
      hubConnection.TraceWriter = Console.Out; 

      IHubProxy hubProxy = hubConnection.CreateHubProxy("PingHub"); 

      hubProxy.On("hello",() => Console.WriteLine($"Hello {DateTime.Now.ToString()}")); 

      hubConnection.Reconnected +=() => 
      { 
       Console.WriteLine("Reconnected"); 
      }; 

      hubConnection.Start().Wait(); 

クライアントのトレースログ

16:55:48.3999367 - null - ChangeState(Disconnected, Connecting) 
16:55:48.8459354 - 6171c2d4-a9dd-4fa4-b710-0910af48132b - SSE: GET http://gf-test-signalr.azurewebsites.net/signalr/connect?clientProtocol=1.4&transport=serverSentEvents&connectionData=[{"Name":"PingHub"}]&connectionToken=9Vs1ACQjDX%2BQmrcJ2XnoLCCJN%2FDtlJd%2BM0r5o8QvORX50ydXDkrAzeeVUgVIzNc3d7JcDvJ49KmxI3oVPQ%2Bt8IUMJe8HGFAJDasufD%2FFwxEr2l23l40q2dlKVADnFJA5 
16:55:48.9604385 - 6171c2d4-a9dd-4fa4-b710-0910af48132b - SSE: OnMessage(Data: initialized) 
16:55:48.9609355 - 6171c2d4-a9dd-4fa4-b710-0910af48132b - SSE: OnMessage(Data: {"C":"d-B53A1D13-E,0|F,0|G,1","S":1,"M":[]}) 
16:55:49.1059354 - 6171c2d4-a9dd-4fa4-b710-0910af48132b - ChangeState(Connecting, Connected) 
16:55:53.0300013 - 6171c2d4-a9dd-4fa4-b710-0910af48132b - SSE: OnMessage(Data: {}) 
16:56:03.0655798 - 6171c2d4-a9dd-4fa4-b710-0910af48132b - SSE: OnMessage(Data: {}) 
16:56:13.0791344 - 6171c2d4-a9dd-4fa4-b710-0910af48132b - SSE: OnMessage(Data: {}) 
16:56:23.0965041 - 6171c2d4-a9dd-4fa4-b710-0910af48132b - SSE: OnMessage(Data: {}) 
16:56:26.7919383 - 6171c2d4-a9dd-4fa4-b710-0910af48132b - ChangeState(Connected, Reconnecting) 
16:56:26.7939373 - 6171c2d4-a9dd-4fa4-b710-0910af48132b - SSE: GET http://gf-test-signalr.azurewebsites.net/signalr/reconnect?clientProtocol=1.4&transport=serverSentEvents&connectionData=[{"Name":"PingHub"}]&connectionToken=9Vs1ACQjDX%2BQmrcJ2XnoLCCJN%2FDtlJd%2BM0r5o8QvORX50ydXDkrAzeeVUgVIzNc3d7JcDvJ49KmxI3oVPQ%2Bt8IUMJe8HGFAJDasufD%2FFwxEr2l23l40q2dlKVADnFJA5&messageId=d-B53A1D13-E%2C0%7CF%2C0%7CG%2C1 
16:56:26.8962939 - 6171c2d4-a9dd-4fa4-b710-0910af48132b - OnError(Microsoft.AspNet.SignalR.Client.HttpClientException: StatusCode: 503, ReasonPhrase: 'Service Unavailable', Version: 1.1, Content: System.Net.Http.StreamContent, Headers: 
{ 
    Date: Tue, 15 Nov 2016 16:56:22 GMT 
    Set-Cookie: ARRAffinity=9fa33f4c59eaa0cb53ffc0472e2395fa67ff17a0f59613b57fb963b1519ab999;Path=/;Domain=gf-test-signalr.azurewebsites.net 
    Server: Microsoft-IIS/8.0 
    Content-Length: 326 
    Content-Type: text/html; charset=us-ascii 
} 
    at Microsoft.AspNet.SignalR.Client.Http.DefaultHttpClient.<>c__DisplayClass5_0.<Get>b__1(HttpResponseMessage responseMessage) 
    at Microsoft.AspNet.SignalR.TaskAsyncHelper.<>c__DisplayClass31_0`2.<Then>b__0(Task`1 t) 
    at Microsoft.AspNet.SignalR.TaskAsyncHelper.TaskRunners`2.<>c__DisplayClass3_0.<RunTask>b__0(Task`1 t)) 
16:56:28.9148136 - 6171c2d4-a9dd-4fa4-b710-0910af48132b - SSE: GET http://gf-test-signalr.azurewebsites.net/signalr/reconnect?clientProtocol=1.4&transport=serverSentEvents&connectionData=[{"Name":"PingHub"}]&connectionToken=9Vs1ACQjDX%2BQmrcJ2XnoLCCJN%2FDtlJd%2BM0r5o8QvORX50ydXDkrAzeeVUgVIzNc3d7JcDvJ49KmxI3oVPQ%2Bt8IUMJe8HGFAJDasufD%2FFwxEr2l23l40q2dlKVADnFJA5&messageId=d-B53A1D13-E%2C0%7CF%2C0%7CG%2C1 
16:56:29.0051243 - 6171c2d4-a9dd-4fa4-b710-0910af48132b - OnError(Microsoft.AspNet.SignalR.Client.HttpClientException: StatusCode: 503, ReasonPhrase: 'Service Unavailable', Version: 1.1, Content: System.Net.Http.StreamContent, Headers: 
{ 
    Date: Tue, 15 Nov 2016 16:56:24 GMT 
    Server: Microsoft-IIS/8.0 
    Content-Length: 326 
    Content-Type: text/html; charset=us-ascii 
} 
    at Microsoft.AspNet.SignalR.Client.Http.DefaultHttpClient.<>c__DisplayClass5_0.<Get>b__1(HttpResponseMessage responseMessage) 
    at Microsoft.AspNet.SignalR.TaskAsyncHelper.<>c__DisplayClass31_0`2.<Then>b__0(Task`1 t) 
    at Microsoft.AspNet.SignalR.TaskAsyncHelper.TaskRunners`2.<>c__DisplayClass3_0.<RunTask>b__0(Task`1 t)) 
16:56:31.0165736 - 6171c2d4-a9dd-4fa4-b710-0910af48132b - SSE: GET http://gf-test-signalr.azurewebsites.net/signalr/reconnect?clientProtocol=1.4&transport=serverSentEvents&connectionData=[{"Name":"PingHub"}]&connectionToken=9Vs1ACQjDX%2BQmrcJ2XnoLCCJN%2FDtlJd%2BM0r5o8QvORX50ydXDkrAzeeVUgVIzNc3d7JcDvJ49KmxI3oVPQ%2Bt8IUMJe8HGFAJDasufD%2FFwxEr2l23l40q2dlKVADnFJA5&messageId=d-B53A1D13-E%2C0%7CF%2C0%7CG%2C1 
16:56:56.7950186 - 6171c2d4-a9dd-4fa4-b710-0910af48132b - OnError(System.TimeoutException: Couldn't reconnect within the configured timeout of 00:00:30, disconnecting.) 
16:56:56.7959897 - 6171c2d4-a9dd-4fa4-b710-0910af48132b - Disconnected 
16:56:56.8103502 - 6171c2d4-a9dd-4fa4-b710-0910af48132b - Transport.Dispose(6171c2d4-a9dd-4fa4-b710-0910af48132b) 
16:56:56.8108527 - 6171c2d4-a9dd-4fa4-b710-0910af48132b - Closed 

答えて

2

16:56:56.7950186 - 6171c2d4-a9dd-4fa4-b710-0910af48132b - ONERROR(System.TimeoutExceptionは:切断、午後12時00分30秒の設定されたタイムアウト内に再接続できませんでした。)

限り私が知っている通り、デフォルト値DisconnectTimeoutは30秒です。ログによると、再接続には約30秒かかりますので、set/change DisconnectTimeout setting in Application_Startかどうか確認してください。

GlobalHost.Configuration.DisconnectTimeout = TimeSpan.FromSeconds(30); 

さらに、接続が失われた後でもハブに継続的に再接続したい場合は、切断されたイベントハンドラからStartメソッドを呼び出すことができます。詳細は「How to continuously reconnect」を参照してください。

+0

こんにちは! DisconnectTimeoutを5分でテストしたところ、アプリケーションは1分以内に起動しますが、クライアントは切断されています。 –

+0

私のアプリケーションでは、DisconnectTimeoutプロパティを5分に設定しました。ウェブサイトの停止と開始に1分以上かかる場合でも、クライアントはハブサーバーに再接続できます。接続を再確立するためにクライアント切断イベントのStartメソッドを呼び出すための回避策を試しますか? –

関連する問題