我们将.Net 3.5工作流作为服务托管,有时会意外停止。在编写文件时,有时会发生这种情况,最近,在收到另一个WCF服务的回复时。没有异常被捕获,因为这些都被记录,并且在托管两者的服务器上的事件日志中没有消息。我添加了日志记录以验证服务是否正在完成它的逻辑,它是(大约需要6分钟)。我所有的超时都远高于他们的需要。我开始认为问题可能是频道正在关闭,并且由于非常高的超时,还没有抛出错误。具有潜在相关性的工作流是异步调用wcf服务,然后在AsyncWaitHandle上使用WaitOne()。我觉得这可能不是最好的主意,但我不确定它是否会导致这个问题。此外,工作流上没有设置持久性(我之前认为unloadOnIdle设置可能导致从被调用服务获取返回值的问题,因为我不清楚它应该如何工作)。 / p>
非常感谢任何帮助/建议。
答案 0 :(得分:0)
您是否检查过客户端的超时设置。我知道在过去我必须更新客户端超时设置以及服务器设置。
答案 1 :(得分:0)
在工作流App.config中(缺少托管工作流的超时?):
<bindings>
<basicHttpBinding>
<binding name="BasicHttpBinding_IService" closeTimeout="00:02:00"
openTimeout="00:02:00" receiveTimeout="04:00:00" sendTimeout="04:00:00"
allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
maxBufferSize="655360000" maxBufferPoolSize="2147483647" maxReceivedMessageSize="655360000"
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://url/Service.svc"
binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IService"
contract="DALService.IService" name="BasicHttpBinding_IService" />
</client>
在DalService WCF web.config中:
<httpRuntime
maxRequestLength="1048576"
executionTimeout="6000000"
/>
<basicHttpBinding>
<binding name ="LargeMessageBinding"
closeTimeout="00:01:00"
openTimeout="00:01:00" receiveTimeout="04:30:00" sendTimeout="04:30:00"
allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
maxBufferSize="655360000" maxBufferPoolSize="524288" maxReceivedMessageSize="655360000"
messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered"
useDefaultWebProxy="true"
/>
<!--maxReceivedMessageSize="6553600" -->
<!--maxBufferSize="6553600" -->
答案 2 :(得分:0)
事实证明,工作流程并没有像我原先想象的那样托管在自己的工作流程中。另一个应用程序崩溃了。 WCF服务已正确配置为使用自己的工作进程,因此它将正确返回,但不再运行应用程序。