我是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>
答案 0 :(得分:2)
IIS是托管长时间运行任务的糟糕选择。如果它正好在20分钟,我会认为iis正在关闭所有者线程,但这是猜测。我真的建议转移到Windows服务wcf托管环境。
答案 1 :(得分:2)
IIS应用程序池空闲默认超时为20分钟。您可以通过以下步骤配置应用程序池空闲超时,我从本文中选择了http://technet.microsoft.com/en-us/library/cc771956(WS.10).aspx
正如重新运行所说,IIS主机不适合您的场景,Windows服务上的WAS将是更好的选择。
答案 2 :(得分:1)
我使用便宜的cron作业服务来每隔5分钟在我的应用上点击一个处理程序。这有助于保持游泳池的活力。如果您不想离开IIS,这是一个快速且“脏”的修复。