簡體   English   中英

無法解釋的WCF服務超時

[英]Unexplainable WCF Service Timeout

運行一個調用WCF服務的MVC網站。
在2台不同的機器上的站點和服務。
.NET Framework 4; IIS 7。

生產站點遇到超時,該超時不該發生。 我創建了最簡單的示例(一個簡單的網站,該網站調用在延遲后返回“ hi mom”的服務方法)並能夠重現該問題。 這是怎么回事:

  • 客戶端網絡應用將其綁定的SendTimeout設置為6分鍾。
  • 服務器服務除了將一條消息寫入文件外,什么都不做,請休眠5分鍾,再寫入另一條消息。
  • 寫入服務器上文件的消息是正確的; 服務器跟蹤顯示沒有問題。
  • 客戶端從不從服務器服務方法接收返回值。 就像失去了與服務器的連接一樣。
  • 客戶端在6分鍾后拋出TimeoutException(任何超時都將進一步延遲該異常)。 如果我將服務器上的線程睡眠時間更改為4分鍾,則一切正常。 這是可重復的,並且沒有其他人對此測試方案感到困惑。

因此,這是客戶端的相關配置部分:

    <binding name="BasicHttpBinding_IService1"
             closeTimeout="00:6:00"
             openTimeout="00:6:00"
             receiveTimeout="00:6:00"
             sendTimeout="00:6:00"
             allowCookies="false"
             bypassProxyOnLocal="false"
             hostNameComparisonMode="StrongWildcard"
             maxBufferSize="2147483647"
             maxBufferPoolSize="2147483647"
             maxReceivedMessageSize="2147483647"
             messageEncoding="Text"
             textEncoding="utf-8"
             transferMode="Buffered"
             useDefaultWebProxy="true">

<httpRuntime executionTimeout="1200"
             maxRequestLength="10240" />

  <serviceBehaviors>
    <behavior>
      <serviceTimeouts transactionTimeout="00:6:00" />
    </behavior>
  </serviceBehaviors>

服務器上存在相同的值。 以下包括我嘗試過的事情:

  • 在上面添加了serviceTimeouts元素。
  • 確保在客戶端代理類上調用close(即使在我看來,這也不是問題,因為每次都會發生錯誤)。
  • 創建一個渠道明確,鑄成IContextChannel並設置OperationTimeout(所概述這里 )。
  • 增加了IIS中服務器應用程序池的FailureInterval屬性。
  • 確保將配置中綁定元素的所有超時值都設置為大於service方法花費的時間的值。
  • 創建一個ChannelFactory並將其設置為Endpoint.Binding.SendTimeout值。
  • 確保在客戶端和服務器上設置了編譯debug =“ false”(除非設置了該超時,否則請閱讀該超時[不確定哪些超時])。
  • 增加了maxBufferSize,maxBufferPoolSize和maxReceivedMessageSize,即使這與問題無關(服務器僅返回“ hi mom”)。
  • 在客戶端代理上的代碼中顯式設置SendTimeout(因為這應該是相關的超時)。
  • 從控制台應用程序調用了該服務(結果相同)。

我還能嘗試什么?

[編輯]將服務移至與Web應用程序相同的機器上,問題消失了。

這是生產環境中防火牆上的HTTP策略:最長請求時間為5分鍾。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM