为什么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将是更好的选择。
IIS是托管长期运行的任务一个糟糕的选择。如果它恰好在20分钟,我会认为iis正在关闭所有者线程,但这是猜测。我真的建议转移到Windows服务wcf托管环境。
thnaks rerun。但是,如果我将这个wcf服务托管到windows服务中,网站如何调用此服务? – 2011-04-21 02:17:14
完全一样。主机独立于它如何让其他主机可以使用 – rerun 2011-04-21 04:12:58
我使用便宜的cron工作服务服务,每5分钟在我的应用程序上点击一个处理程序。这有助于保持泳池的活力。如果你不想离开IIS,这是一个快速和“脏”的修复。
感谢NovaJob,我之前也得到了这个想法,:P – 2011-04-21 04:08:50
感谢Sachin,我试图将空闲时间设置为5分钟,以便wcf服务在5分钟内停止。 – 2011-04-21 02:41:34
谢谢Sachin,我将空闲时间更改为0,以使此wcf服务保持运行。我知道这不是一个理想的解决方案。但是我现在必须选择这种方法。我计划在未来将其转移到Windows服务中。但是如何让一个网站调用这个Windows服务?你有什么想法吗?谢谢。 – 2011-04-21 04:07:29
应用程序池的这种和其他“副作用”是我总是建议自己托管生产级WCF服务的一些原因,这是在受控的Windows NT服务中。 – 2011-04-21 06:15:22