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

时间:2011-04-21 01:43:52

标签: multithreading wcf

我是wcf和mulit-thread的新手,我写了一个在IIS7中托管的wcf服务,在这个服务中有一个长期运行的任务(System.Threading.Tasks.Task),可能会运行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>

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:2)

IIS应用程序池空闲默认超时为20分钟。您可以通过以下步骤配置应用程序池空闲超时,我从本文中选择了http://technet.microsoft.com/en-us/library/cc771956(WS.10).aspx

  • 打开IIS管理器。
  • 展开服务器节点,然后单击“应用程序池”。
  • 在“应用程序池”页面上,选择要为其指定空闲超时设置的应用程序池,然后单击“操作”窗格中的“高级设置”。
  • 在“空闲超时(分钟)”框中,键入分钟数,然后单击“确定”。

正如重新运行所说,IIS主机不适合您的场景,Windows服务上的WAS将是更好的选择。

答案 2 :(得分:1)

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