2015-07-20 16 views
0

我使用IIS 7.5託管的測試WCF Web服務對響應一段時間不活動(即每天的第一個呼叫)後發出的呼叫的響應一直很慢。即使安裝了應用程序初始化模塊,第一個webservice響應也很慢

通過研究此主題,我發現在使用IIS時(例如see here),通常會遇到「應用程序熱身」問題。

我已經採取了建議,試圖緩解這個問題通常的步驟:

  • 安裝了Application Initialization Module
  • 禁用應用程序池空閒超時和正常回收時間間隔(即將它們設置爲'0')。
  • 編輯applicationhost.config文件,使autoStart=TruestartMode="alwaysRunning"爲必要的應用程序池,preloadEnabled="true"爲我的應用程序。

使用這些設置,我希望應用程序池在IIS啓動時立即啓動工作進程,並在現有的進程退出時啓動新的工作進程。另外,我希望應用程序在工作進程中加載​​。

但是,對於每天的第一個呼叫,日誌顯示客戶端撥打電話和接收呼叫的網絡服務之間的時間差可能高達10秒。後續呼叫通常在2秒鐘內完成處理。

奇怪的是,長響應時間是而不是通過在iisreset命令之後撥打電話轉載。我希望這樣一個嚴厲的操作會使web服務處於類似的「冷」狀態,但是這似乎並不是這種情況。

我想知道:

  • 什麼仍可能導致應用程序中的「熱身」延遲?
  • 跟隨iisreset以及長時間不活動狀態的web服務狀態有什麼不同?
  • 我是否應該使用「心跳」解決方案來定期ping服務以保持活躍狀態​​?

在此先感謝您的任何提示或見解。

回答

0

我會盡力幫助你的問題:

什麼仍可能導致應用程序中的「熱身」延遲?

預熱應用程序並不意味着預熱其資源。例如,如果您在WCF應用程序(https://msdn.microsoft.com/en-us/library/ee677260(v=azure.10).aspx)中配置了使用Application Fabric的自動啓動,並且此應用程序使用EF訪問數據庫,則它不會啓動您的DBContext。 如果希望在應用程序預熱後初始化這些資源,則需要實現一種方法來初始化資源,如緩存,DBContext等。

是什麼在web服務的以下IISRESET和非活動的長期狀態的差別?

當應用程序長時間處於非活動狀態時,應用程序池可能會關閉,並在接收到任何請求(如回收)時重啓。 此鏈接有大約IISRESET和應用程序池回收的區別感興趣的信息,並且它可以幫助回答你的問題:https://fullsocrates.wordpress.com/2012/07/25/iisreset-vs-recycling-application-pools/

我應該再打一場「心臟跳動」的解決方案,定期ping該服務,以保持它活着?

如果你繼續訪問服務的,它可能會保留在內存中初始化其資源,所以可以是一個不錯的辦法。 無論如何,如果您的應用程序池配置爲在某個間隔時間內回收,它將被回收,並且內存中的資源丟失。 如果它看起來有問題,只需關閉此功能去IIS - >應用程序池 - >高級設置,並設置常規時間間隔= 0 對於這個問題,這只是一些建議,你需要做一些測試,並找出更好的解決方案。

+0

謝謝您的迴應,並獲取相關信息。 我的應用程序在資源上很輕鬆;它的工作是簡單地查詢第三方Web服務,因此我不認爲在這種情況下初始化資源的方法會有所幫助。 正如我在我的文章中提到的,我試圖將常規時間間隔設置爲'0',但問題仍然存在。 最後,我不得不求助於一個「心跳」的應用程序,以保持網絡服務的活力,這並不理想,但它的確能完成這項工作。 – vertumnus83

相關問題