2009-11-03 45 views
1

我們有IIS6對ASP.NET Web服務上運行的SOAP Web服務表現出奇怪的行爲,當它處理導致長服務器時間的請求在ASP.NET Web服務結果的SOAP請求處理。本質上,如果一個請求在服務器上處理需要超過5分鐘的時間,那麼IIS永遠不會將響應發送回客戶端,儘管從ASP.NET的角度來看,調用已完成。我們知道這一點,因爲我們在Web方法調用的開始和結束處將條目寫入應用程序日誌,並且寫入這些日誌條目。但是,實際上並未發出響應,並且連接似乎無限期地保持打開狀態。在一次測試中,我們看到連接在超過24小時內保持打開狀態,然後我們手動停止測試客戶端。長期運行中沒有響應

我們有一個測試SOAP客戶端,能夠檢測的響應開始流了下來,將其從服務器,並在服務器處理時間花費太長的情況下的那一刻,沒有什麼是以往任何時候都流了下來。即使使用大量的響應負載,我們也應該在Web方法的「結束」應用程序日誌條目寫入後不久看到響應慢慢消失,但我們從未看到它。

確切的服務器處理時間,事情的行爲在這個莊園是很難確定。我們有一個長時間運行的測試調用,導致大約2.5分鐘的服務器處理時間,並且該調用導致對客戶端的成功響應。我們有另一個需要大約8分鐘的時間,如上所述那個失敗。所以閾值必須介於兩者之間。

回答

1

我建議你調用Web方法來啓動你需要的任務的執行,比使用其他方法來輪詢任務的完成服務器。兩年前我遇到了同樣的問題,我以這種方式解決了這個問題。客戶端在服務器上排隊一個任務,然後在指定的時間間隔後向服務器詢問任務的結果。

我希望有幫助。

+0

這不是一個壞主意。我們實際上正在考慮對未來將添加的其他Web方法使用這種更「異步」的方法,我們知道這種方法將長期運行。這種特定方法的問題是大多數輸入導致相對短的呼叫;只有少數邊緣案例會導致它像這樣長時間運行。如果強迫我們的客戶僅爲這些情況使用輪詢,這將會增加複雜性。 很高興知道是什麼導致服務器不再響應。它幾乎看起來像IIS或ASP.NET Web服務中的錯誤。 – twistedstream 2009-11-03 13:10:13