2017-08-29 110 views
2

我在IIS 8.0中大約兩週前部署了一個.NET Web API應用程序。IIS ShutDownTimeLimit重新觸發Web API控制器操作

有一個很長的掛起方法可以異步處理大量的東西,它可能需要大約20/30分鐘(客戶端可以關閉應用程序並獲得帶結果的電子郵件或等待直到屏幕上該過程結束)。

問題發生後,在等待響應90秒後,調用掛起並重試再次執行相同的調用,例如:我嘗試處理15個項目(將它們插入數據庫),90秒後,進程掛起並重新開始(插入另外15條記錄),最終整個過程就會掛起,永遠不會結束。

經過長時間的搜索和搜索,我發現IIS的應用程序池ShutDownTimeLimit實際上正在殺死我的呼叫,因爲它是空閒的,並且在默認時間內沒有收到任何響應(這是90秒)。我增加了價值,基本上解決了我的問題。

但是,我仍然不確定爲什麼我的控制器上的操作被重新觸發,是否有人知道在檢測到ShutDownTimeLimit被超過後IIS實際上正在重試執行呼叫?

任何幫助,將不勝感激。

PD:我的前端只做1個確切的呼叫,沒有來自它的多個呼叫。

+0

我遇到了完全相同的問題。你有沒有發現控制器被重新觸發的原因? –

回答

0

即使ShutDownTimeLimit被超過,當關閉時間足夠長以允許這一點時,舊工作進程將優雅地關閉(完成請求處理)。但是,當達到關閉時間限制時,如果有另一個請求,則可以啓動新的工作進程。而且我不認爲IIS會重試該呼叫(並且我已經測試過)。所以請確保從前端或其他地方沒有其他呼叫。順便說一下,在ApiController中啓動基本上長時間運行的「即燃即用」任務不是一個好主意,在this question中進一步閱讀。