私はハブでSignalR 0.5.3を使用しており、トランスポートを次のようにロングポーリングに明示的に設定しています:
$.connection.hub.start({ transport: 'longPolling' }, function () {
console.log('connected');
});
このような構成で (global.asax.cs Application_Start メソッドで):
GlobalHost.DependencyResolver.UseRedis(server, port, password, pubsubDB, "FooBar");
GlobalHost.Configuration.DisconnectTimeout = TimeSpan.FromSeconds(2);
GlobalHost.Configuration.KeepAlive = TimeSpan.FromSeconds(15);
ただし、長いポーリングは、開発環境 (IIS Express) でも運用環境 (IIS 7.5) でも機能していないようです。接続は適切に行われているように見えますが、長いポーリング リクエストは常にタイムアウトになり (約 2 分後)、その後再接続が行われます。IIS からのログはこちらにあります。最初のタイムアウト要求からの応答:
{"MessageId":"3636","Messages":[],"Disconnect":false,"TimedOut":true,"TransportData":{"Groups":["NotificationHub.56DDB6692001Ex"],"LongPollDelay":0}}
タイムアウトした再接続応答は次のようになります。
{"MessageId":"3641","Messages":[],"Disconnect":false,"TimedOut":true,"TransportData":{"Groups":["NotificationHub.56DDB6692001Ex"],"LongPollDelay":0}}
この問題に関して何か助けていただければ幸いです。ありがとう。
編集
再接続が新しい長いポーリング サイクルの開始を意味する場合、global.asax.cs の KeepAlive 設定が 15 秒に設定されている場合、約 2 分後に開始されるのはなぜですか? これの問題は、IIS の前にリバース プロキシがあり、キープアライブ リクエストを 25 秒後にタイムアウトするため、このリバース プロキシのタイムアウトに達すると 504 応答が返されることです。