2011-04-21 101 views
0

我是wcf和mulit-thread的新手,我寫了一個IIS7託管的wcf服務,在這個服務中有一個長時間運行的任務(System.Threading.Tasks.Task),它可能會運行20個小時。爲什麼WCF服務每20分鐘停止工作一次?

但是這個wcf服務總是停止工作,每20分鐘一次。

當application_stop和application_start運行時,我使wcf發送電子郵件給我。因此,我開始運行時收到一封電子郵件,然後在20分鐘後,我收到電子郵件顯示該服務停止。

我真的不明白爲什麼會發生這種情況,爲什麼服務每20分鐘停止工作一次。

wcf服務每20分鐘停止一次還是任務線程每20分鐘停止一次?

IIS7的任何配置會影響wcf的運行時間嗎?

我嘗試了receiveTimeout設置爲一個很長的時間量,我用asych調用來調用客戶端WCF,但是這並沒有使幫助。

夥計們,我真的需要幫助,非常感謝。

下面的代碼屬於一個網站,該網站稱此WCF服務

<system.serviceModel> 
    <bindings> 
     <basicHttpBinding> 
     <binding name="BasicHttpBinding_IMailingService" closeTimeout="00:01:00" 
      openTimeout="00:01:00" receiveTimeout="24.20:31:23.6470000" sendTimeout="00:01:00" 
      allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard" 
      maxBufferSize="65536" maxBufferPoolSize="524288" maxReceivedMessageSize="65536" 
      messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered" 
      useDefaultWebProxy="true"> 
      <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384" 
      maxBytesPerRead="4096" maxNameTableCharCount="16384" /> 
      <security mode="None"> 
      <transport clientCredentialType="None" proxyCredentialType="None" 
       realm="" /> 
      <message clientCredentialType="UserName" algorithmSuite="Default" /> 
      </security> 
     </binding> 
     </basicHttpBinding> 
    </bindings> 
    <client> 
     <endpoint address="http://localhost:92/MailingService.svc" binding="basicHttpBinding" 
     bindingConfiguration="BasicHttpBinding_IMailingService" contract="MalingService.IMailingService" 
     name="BasicHttpBinding_IMailingService" /> 
    </client> 
    </system.serviceModel> 

回答

2

IIS應用程序池空閒默認超時時間爲20分鐘。您可以通過以下步驟來配置應用程序池空閒超時,這是我從本文中選擇的 - http://technet.microsoft.com/en-us/library/cc771956(WS.10).aspx

  • 打開IIS管理器。
  • 展開服務器節點並單擊應用程序池。
  • 在「應用程序池」頁面上,選擇要爲其指定空閒超時設置的應用程序池,然後單擊「操作」窗格中的「高級設置」。
  • 在空閒超時(分鐘)框中,鍵入分鐘數,然後單擊確定。

正如rerun所言,IIS主機並不是您的場景中的最佳選擇,因此Windows Service上的WAS將是更好的選擇。

+0

感謝Sachin,我試圖將空閒時間設置爲5分鐘,以便wcf服務在5分鐘內停止。 – 2011-04-21 02:41:34

+0

謝謝Sachin,我將空閒時間更改爲0,以使此wcf服務保持運行。我知道這不是一個理想的解決方案。但是我現在必須選擇這種方法。我計劃在未來將其轉移到Windows服務中。但是如何讓一個網站調用這個Windows服務?你有什麼想法嗎?謝謝。 – 2011-04-21 04:07:29

+1

應用程序池的這種和其他「副作用」是我總是建議自己託管生產級WCF服務的一些原因,這是在受控的Windows NT服務中。 – 2011-04-21 06:15:22

2

IIS是託管長期運行的任務一個糟糕的選擇。如果它恰好在20分鐘,我會認爲iis正在關閉所有者線程,但這是猜測。我真的建議轉移到Windows服務wcf託管環境。

+0

thnaks rerun。但是,如果我將這個wcf服務託管到windows服務中,網站如何調用此服務? – 2011-04-21 02:17:14

+1

完全一樣。主機獨立於它如何讓其他主機可以使用 – rerun 2011-04-21 04:12:58

1

我使用便宜的cron工作服務服務,每5分鐘在我的應用程序上點擊一個處理程序。這有助於保持泳池的活力。如果你不想離開IIS,這是一個快速和「髒」的修復。

+0

感謝NovaJob,我之前也得到了這個想法,:P – 2011-04-21 04:08:50

相關問題