Skip to content

.Net client webSockets fallback wait transportConnectTimeout then start next transport  #2903

@Xiaohongt

Description

@Xiaohongt

When .Net client fallback, webSockets connection wait until the time transportConnectTimeout then start next transport, doesn't optimize start next after transport failed, e.g. set transportConnectTimeout = 60 seconds, tracing for repro:

06:21:59.5036332 - null - ChangeState(Disconnected, Connecting)
[2/23/2014 10:21:59 PM]: Disconnected =>  Connecting
06:21:59.9236322 - 5f5ef2e4-af3d-455e-96b4-c277dd3bee78 - WS Connecting to: ws:/
/localhost/SignalRTest_1/signalr/signalr/connect?transport=webSockets&connection
Token=ohkI0JwCvGJ9OQqGJo%2BFsk4XYB42OJdmv2OllOEOZYwe%2FZsBFQc5U%2FRp7X7A13Kjm%2B
qg%2F8NUTjnLRM2mYWt6evn43f9jbIkOrOLPmXFEhpLdDfrfrvfDkkVVex1zJ7tS&connectionData=
[{"Name":"hubConnectionAPI"}]
06:21:59.9696320 - 5f5ef2e4-af3d-455e-96b4-c277dd3bee78 - WS: OnClose()
06:22:59.9948097 - 5f5ef2e4-af3d-455e-96b4-c277dd3bee78 - Auto: Failed to connec
t to using transport webSockets. System.TimeoutException: Transport timed out tr
ying to connect
06:22:59.9978086 - 5f5ef2e4-af3d-455e-96b4-c277dd3bee78 - SSE: GET http://localh
ost/SignalRTest_1/signalr/signalr/connect?transport=serverSentEvents&connectionT
oken=ohkI0JwCvGJ9OQqGJo%2BFsk4XYB42OJdmv2OllOEOZYwe%2FZsBFQc5U%2FRp7X7A13Kjm%2Bq
g%2F8NUTjnLRM2mYWt6evn43f9jbIkOrOLPmXFEhpLdDfrfrvfDkkVVex1zJ7tS&connectionData=[
{"Name":"hubConnectionAPI"}]
06:23:00.0988089 - 5f5ef2e4-af3d-455e-96b4-c277dd3bee78 - Auto: Failed to connec
t to using transport serverSentEvents. Microsoft.AspNet.SignalR.Client.HttpClien
tException: StatusCode: 500, ReasonPhrase: 'Internal Server Error', Version: 1.1
, Content: System.Net.Http.StreamContent, Headers:
{
  Transfer-Encoding: chunked
  Cache-Control: private
  Date: Mon, 24 Feb 2014 06:22:59 GMT
  Server: Microsoft-IIS/8.5
  X-AspNet-Version: 4.0.30319
  X-Powered-By: ASP.NET
  Content-Type: text/html; charset=utf-8
}
   at Microsoft.AspNet.SignalR.Client.Http.DefaultHttpClient.<>c__DisplayClass2.
<Get>b__1(HttpResponseMessage responseMessage)
   at Microsoft.AspNet.SignalR.TaskAsyncHelper.<>c__DisplayClass19`2.<Then>b__17
(Task`1 t)
   at Microsoft.AspNet.SignalR.TaskAsyncHelper.TaskRunners`2.<>c__DisplayClass3a
.<RunTask>b__39(Task`1 t)
06:23:00.1138081 - 5f5ef2e4-af3d-455e-96b4-c277dd3bee78 - LP Connect: http://loc
alhost/SignalRTest_1/signalr/signalr/connect

Note,
It is not regression.
SSE doesn't repro

Repro:

  1. For server signalr web site, use the aspnet sample, change to use , use Sql scale-out, but stop the Sql server service, set GlobalHost.Configuration.TransportConnectTimeout = TimeSpan.FromSeconds(60)
    2.In .net client, run below code:
            var hubConnection = new HubConnection("http://localhost:40476/");
            hubConnection.TraceWriter = Console.Out;
            var hubConnectionAPI = hubConnection.CreateHubProxy("hubConnectionAPI");
            hubConnectionAPI.On("displayMessage", value => Console.WriteLine("[" + DateTime.Now.ToShortTimeString() + "]: " + value));

            hubConnection.StateChanged += stateChange =>
            {
                Console.WriteLine("[" + DateTime.Now + "]: " + stateChange.OldState + " =>  " + stateChange.NewState + " " + hubConnection.ConnectionId);
            };

            hubConnection.Start().Wait();

Actual Result:
webSockets connection wait until transportConnectTimeout then start next transport

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions