2017-10-06 8 views
1

SignalR永続接続で奇妙な問題が発生しました。これは、C#で書かれたモノサービス内で実行され、長いポーリング転送を使用します。アプリケーションは、KVM内のUbuntu VM上で動作します。アプリケーションとHTML/jsクライアント間の通信はほとんどの場合正常ですが、何らかの理由で何らかの理由で新しく作成された接続がすべて動作すると、接続が確立され、OnConnectedメソッドが呼び出されますが、それはタイムアウトします。アプリケーションがこの状態になる100%のケースでは、それを再起動することは役に立ちません。クライアントからの「ポーリング」要求は依然として時間切れになります。これを助ける唯一のことは、VM全体を再起動することです。そんなことを経験した人はいますか? SignalRはファイルシステムへの接続データを保持しています。なぜなら、アプリケーションを再起動しても、長いポーリング要求をタイムアウトさせる理由があるからです。SignalR永続的な接続がクライアントからの「ポーリング」要求のタイムアウトを開始し、再起動後に回復しません。

答えて

0

愚かな私!この問題は、SignalR接続の認可中に起こっていたデータベースアクセスと関係していました。 DBアクセス層の設計がうまくいかず、DBがロックされることがありました。認証手続きは、DBロックが解放され、最終的にはタイムアウトするのを待ちます。この逸話を読んでいる人のためのアドバイスとして、PersistentConnectionの場合、AuthorizeRequestメソッド内でIO重いものは起こっていないことを確認してください!それを避けることができない場合、それは非常に慎重に設計されるべきです、そうでなければタイムアウトを求めています。

関連する問題