0

私は次のJSコードを持っています

var chat = $.connection.MyHub;
chat.client.initChart = function (data) { 
    ... do stuff ...
}

そしてこのハブコード

public class MyHub : Hub
{
    public override Task OnConnected()
    {
        using (var conn = new SqlConnection(ConnectionString))
        {
            conn.Open();

            //Using Dapper
            var data = conn.Query("SELECT data FROM Sql").ToList();


            return Clients.Caller.initChart(data);
        }
    }

}

これは私のマシン(Win7Pro、IIS 7)で完全に機能しますが、サーバー(Win2008R2、iis7)に展開すると、initChart関数が呼び出されません。サーバーにVSをインストールしました。プロセスをデバッグすると、OnConnectedイベントが呼び出されて正常に完了しますが、クライアントでは何も起こりません。私が見ることができるJSエラーやサーバー側エラーは発生していません。

さらに混乱させるために、NServiceBusハンドラーによって呼び出される別の関数がクライアントで宣言されています。この関数は毎回呼び出され、そこにブラウザーブレークポイントを設定すると、呼び出されていることがわかります。

私のマシンでsignalRログを確認すると、SSEが使用されますが、サーバーでは長いポーリングにフォールバックします。

更新:サーバーがAkamaiのDSDの背後にあることに気づきました。これを実行しないと、機能しますが、なぜ違いが生じるのかわかりません。

2回目の更新:

connect?transport=serverSentEvents&connectionId=9fce5552-4c2e-4739-93ea-501dda0a0654&connectionData=%5B%7B%22name%22%3A%22navigationtiminghub%22%7D%5D&tid=9 HTTP/1.1通話のさまざまな応答ヘッダーは次のとおりです

まず、オリジンに直接電話したときのリクエスト:

HTTP/1.1 200 OK
Cache-Control: no-cache
Pragma: no-cache
Transfer-Encoding: chunked
Content-Type: text/event-stream
Expires: -1
Server: Microsoft-IIS/7.5
Date: Mon, 07 Jan 2013 01:08:26 GMT

これがアカマイの回答です。wiresharkによると、サーバーからAkamaiへの応答は上記の応答と同じであることに注意してください。

HTTP/1.1 200 OK
Content-Type: text/event-stream
Server: Microsoft-IIS/7.5
Expires: Mon, 07 Jan 2013 01:07:23 GMT
Cache-Control: max-age=0, no-cache, no-store
Pragma: no-cache
Date: Mon, 07 Jan 2013 01:07:23 GMT
Content-Length: 486
Connection: keep-alive

また、最初の接続では(必要に応じて)接続が開いたままになり、2番目の接続は閉じます。

更新3:これは純粋にアカマイの問題です。Edgecastに切り替えただけで、SSE接続に正しく応答します。

4

1 に答える 1

2

Content-Lengthヘッダーがあり、応答にもヘッダーがないため、上記のヘッダーでこれを確認できTransfer-Encodingます。

自分でバッファリングを有効にすることはできませんが、専門サービスチームにバッファリングを依頼することはできます。

これにより、Chromeのサーバー送信イベントは修正されたようですが、IE9のForeverFrameは修正されていません。

Forever Frameでは、これは圧縮の問題のようです。リクエストからヘッダーを削除すると、Transfer-Encoding: chunkedヘッダーが復元さAccept-Encodingれます。その後、IEはうまく機能します。ハブURLには、エッジのgzip機能を除外する必要があります。

于 2013-01-10T09:47:59.983 に答える