为什么WCF服务每20分钟停止工作一次?

问题描述:

我是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> 

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

IIS是托管长期运行的任务一个糟糕的选择。如果它恰好在20分钟,我会认为iis正在关闭所有者线程,但这是猜测。我真的建议转移到Windows服务wcf托管环境。

+0

thnaks rerun。但是,如果我将这个wcf服务托管到windows服务中,网站如何调用此服务? – 2011-04-21 02:17:14

+1

完全一样。主机独立于它如何让其他主机可以使用 – rerun 2011-04-21 04:12:58

我使用便宜的cron工作服务服务,每5分钟在我的应用程序上点击一个处理程序。这有助于保持泳池的活力。如果你不想离开IIS,这是一个快速和“脏”的修复。

+0

感谢NovaJob,我之前也得到了这个想法,:P – 2011-04-21 04:08:50