我有一個WCF REST服務,託管在IIS中。客戶(主要是瀏覽器)一直在抱怨偶爾掛起。我終於親自體驗了這一點,並能夠從服務器獲取一些調試信息。我從IIS管理控制檯抓取了以下截圖。WCF服務掛在SendResponse
顯然,這些請求都被周圍的時間太長了。
雖然這些請求被掛起,但服務器能夠處理其他請求就好了。我幾次回收應用程序池,沒有明顯效果。在此期間,來自我的瀏覽器的任何請求都會掛起,然後由瀏覽器超時。我的同一臺計算機上的其他瀏覽器能夠連接到相同的服務,沒有任何問題。我也開除了Fiddler,然後通過Fiddler從我的「掛斷」瀏覽器發出請求。當我關閉Fiddler時,瀏覽器再次「掛起」。當我最終關閉瀏覽器時,連接消失了。
一個潛在的重要問題是:您不能在屏幕截圖中分辨出來,但請求都掛在發送二進制流(照片&視頻)到客戶端的呼叫上。在封面下,我打開Azure Blob存儲流(使用OpenRead()),然後從我的函數返回相同的流。所以我正在通過網絡讀取數據,並將數據傳輸到另一端的網絡。
那麼這裏發生了什麼?我怎樣才能防止連接掛起,或者至少讓他們在某個合理的時間點超時?
更新:看起來瀏覽器可能是問題。如果頁面上有一個HTML5 <video>
元素,並且視頻足夠大,那麼瀏覽器似乎會打開一個連接以下載文件並將其永久打開。我只有約75%的確定,但如果/當我找到肯定的時候,我會在這裏添加更新。
我其實是這麼做的。最初的凍結是在Chrome中,但在同一臺機器上的Firefox和IE9都很好。我還有其他用戶在這些瀏覽器中報告錯誤,這導致我相信這不是瀏覽器特定的問題。 –