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:
- 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
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:
Note,
It is not regression.
SSE doesn't repro
Repro:
2.In .net client, run below code:
Actual Result:
webSockets connection wait until transportConnectTimeout then start next transport