IISでホストされているWCFRESTサービスがあります。クライアント(主にブラウザ)は、時折ハングすることについて不平を言っています。私はついにこれを自分で体験し、サーバーからデバッグ情報を取得することができました。IIS管理コンソールから次のスクリーンショットを取得しました。
明らかに、これらの要求はすべて非常に長い間存在していました。
これらのリクエストがハングしている間、サーバーは他のリクエストを問題なく処理できました。アプリプールを数回リサイクルしましたが、明らかな効果はありませんでした。この間、ブラウザからのリクエストはすべてハングし、ブラウザによってタイムアウトになります。同じマシン上の他のブラウザは、問題なく同じサービスに接続できました。また、Fiddlerを起動し、「ハングした」ブラウザーからFiddlerを介してリクエストを行うことができました。Fiddlerをシャットダウンすると、ブラウザが再び「ハング」しました。ようやくブラウザを完全に閉じたとき、接続が失われました。
潜在的に重要なポイントの1つ:スクリーンショットではわかりませんが、リクエストはすべて、バイナリストリーム(写真とビデオ)をクライアントに送信する呼び出しにかかっています。裏で、Azure Blob Storageからストリームを開き(OpenRead()を使用)、関数から同じストリームを返します。つまり、一方の側でネットワークを介して読み取り、もう一方の側でデータをネットワークに送り出しているのです。
では、ここで何が起こっているのでしょうか。接続がハングするのを防ぐにはどうすればよいですか、または少なくとも適切な時点で接続がタイムアウトになるようにするにはどうすればよいですか?
更新:ブラウザに問題があるようです。ページにHTML5<video>
要素があり、ビデオが十分に大きい場合、ブラウザーはファイルをダウンロードして永久に開いたままにするための接続を開いているように見えます。私はそれについて約75%しか確信していませんが、確実にわかった場合は、ここに更新を追加します。