2016-11-15 3 views
2

내 SignalR 허브를 호스팅하는 Azure 웹 응용 프로그램을 다시 시작한 후 이상한 재 연결 문제가 발생합니다. 다시 시작할 때 응용 프로그램이 DisconnectTimeout (2 분 테스트) 미만으로 다시 시작하더라도 클라이언트는 다시 연결하지 않습니다.Azure 웹 응용 프로그램 재시작 후 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
백45경1천5백15조5백36억9천1백36만3천2백10

16 : 56 : 56.7950186 - 6171c2d4-a9dd-4fa4-b710-0910af48132b -의 OnError (System.TimeoutException는 :. 분리, 0시 0분 30초 구성의 제한 내에서 다시 연결할 수있다)

한국인 아시다시피 기본값 인 DisconnectTimeout은 30 초입니다. 그리고 로그에 따르면 다시 연결하는 데 약 30 초가 걸리므로 set/change DisconnectTimeout setting in Application_Start인지 확인하십시오.

게다가 연결이 끊어진 후에도 허브에 계속 다시 연결하려면 연결이 끊긴 이벤트 처리기에서 Start 메서드를 호출 할 수 있습니다. 자세한 내용은 "How to continuously reconnect"을 참조하십시오.

+0

안녕하세요! DisconnectTimeout을 5 분으로 테스트했는데 응용 프로그램이 1 분 안에 시작되지만 클라이언트는 연결이 끊어졌습니다. –

+0

내 응용 프로그램에서 DisconnectTimeout 속성을 5 분으로 설정하면 웹 사이트를 중지하고 시작하는 데 1 분 이상 걸리는 경우에도 클라이언트가 허브 서버에 다시 연결할 수 있습니다. 연결을 재설정하기 위해 클라이언트의 연결이 끊긴 이벤트에서 Start 메소드를 호출하는 해결 방법을 시도합니까? –