2013-03-14 620 views
6

在我當前的項目中,我們(我的意思是「項目團隊」)使用託管在IIS上的WCF服務。NetTcpActivator服務(Net.Tcp偵聽器適配器)偶爾停止響應

這裏有一些技術細節可能是重要的:

  1. 我們使用NET 3.5 WCF服務
  2. 我們使用的net.tcp通信協議
  3. 我們同時使用IIS 7和IIS 7.5主辦這些服務
  4. 我們使用多個IIS工作進程在每個服務器上

所以,問題是 - 有時WCF-服務變得不可用。當我們嘗試訪問這些WCF服務時,我們會遇到超時錯誤。並且恢復WCF服務功能的唯一方法是重新啓動NetTcpActivator(Net.Tcp偵聽器適配器)Windows服務。

根據我的同事的理論,這個錯誤可能與此知識庫文章中描述的問題:

FIX:Smsvchost.exe爲WCF服務,當你運行一個.NET Framework 4-停止響應基於WCF服務http://support.microsoft.com/kb/2536618

根據這篇文章,SMSvcHost(它承載NetTcpActivator和端口共享服務容器服務)掛斷,如果它不能請求路由到60秒以上W3WP(IIS工作進程)(非可配置超時)。不幸的是,我們無法找到重現此錯誤的方法。例如,我們將SMSvcHost限制爲1個CPU內核和1個線程,並將擴展暫掛連接限制爲1M,並在用戶模式下將其推至100%的CPU負載。它沒有掛!

有時我們的負載測試會導致奇怪的錯誤,但是當我們停止它們時,所有服務會自動恢復到正常狀態。但有時不重載可能會掛起NetTcpActivator!

另外,我想說這不是一個新問題。我的同事3年前已經知道了(請參閱此主題了解更多信息http://forums.iis.net/t/1167668.aspx/1/10)。不幸的是,他們沒有得到答案。問題在一些配置更改後消失!現在它又回到了新的服務器上。

我會很感激你的想法和想法!

+0

永遠解決這個問題嗎? – 2013-08-08 10:07:39

+0

我有一張與微軟就此有關的票。我能夠經常複製,但不可靠。到目前爲止,它似乎不是你鏈接到的同一個問題,因爲對此的修復已經結束,內存轉儲也不同了。希望我們能夠得到一個解決方案,我會在這裏發佈更新。 – 2014-04-02 18:17:11

回答

0

好吧,經過大量的研究,我追蹤了我們問題的原因。發生這種情況可能還有其他情況,但希望這可以幫助一些人。微軟正在實驗室中進行復制,並最終應該修復。

在我們的例子中,所有的行星都必須對齊。我們有一個用於客戶端和服務器的.NET 4集成應用程序池(在開發人員計算機上)。該服務正在使用外部配置文件進行綁定(<bindings configSource="serviceModel.bindings.config" />),該文件從另一個項目鏈接並在構建時複製了一個添加到服務的.csproj中的自定義構建任務。

重現該問題:

  1. 停止所有正在運行的SMSvcHost服務(*的net.tcp,Net.Pipe,Net.Msmq)。由於SMSvcHost進程沒有消失,重新啓動將不起作用。
  2. 在Visual Studio中,運行一個乾淨的WcfService
  3. 從Windows資源管理器,在WcfService刪除serviceModel.bindings.config
  4. 運行IISRESET(擺脫W3WP和啓動SMSvcHost服務 - 按F5鍵是服務列表,查看)
  5. 構建WcfService(複製鏈接的配置文件)
  6. 瀏覽到WcfClient頁面,提交兩次。如果您每次都遇到錯誤,您可能會遇到問題。在我們的主應用程序中,它在測試應用程序CommunicationObjectFaultedException中給出超時,而不是超時,但是沒有問題。
  7. 停止SMSvcHost服務。如果發生問題,SMSvcHost的事件ID 8被記錄到系統事件日誌中。

我不知道如果w3wp或SMSvcHost是罪魁禍首。步驟#3是至關重要的,但我無法解釋爲什麼。如果你不刪除該文件,那麼一切都很好。如果修改文件(創建日期保持不變),一切正常。如果將配置XML移動到主Web.config文件中,則一切正常。當構建任務複製文件時,創建的日期會更新,所以我猜測它是以某種方式緩存的,其中一個進程檢測到日期更改。

如果您重新啓動SMSvcHost服務(完全停止,完全啓動)一次或兩次,客戶端請求將通過,從此您就可以了。

所以我現在的猜測是,這可能是一個部署後的問題,但如果你確定一切正在運行(並根據需要重新啓動服務),那麼你應該沒問題。您也可以不執行外部/鏈接文件。

一旦微軟追查這個問題,我希望能有更多的見解。

最終更新 我忘了早點回來。微軟基本上承認他們可能有一個錯誤,但由於有一個解決方法,並花了足夠的時間在票上,他們正在關閉它,而不是進一步研究。似乎有某種類型的比賽條件時,SMSvcHost具有以下設置啓動(類似於我在前面貼):在IIS

  1. 主機WCF
  2. 使用非HTTP綁定,這樣SMSvcHost進入使用configSource

鏈接外部配置無關發揮它的綁定

  • 使用外部配置文件。解決方法是不使用configSource,我們現在正在做。

  • +0

    我相信你是對的,它被緩存了。清空你的臨時目錄。由於您在IIS中託管 - 我猜測它被緩存在Microsoft.NET文件夾的.Net區域中。我有一個類似的問題與Web應用程序 - 除非我從該文件夾中刪除緩存的運行時,它似乎有新的和舊的信息在一起,我的應用程序不會工作。我從來沒有想清楚爲什麼這種行爲;只是在開發時我已經解決了它。我手動刪除了舊的第一個這是一個痛苦的脖子,但它比試圖解決這個問題更容易。 – Stix 2015-11-20 15:11:33