作为WCF服务的工作流意外停止

时间:2010-02-26 17:15:52

标签: c# .net wcf workflow

我们将.Net 3.5工作流作为服务托管,有时会意外停止。在编写文件时,有时会发生这种情况,最近,在收到另一个WCF服务的回复时。没有异常被捕获,因为这些都被记录,并且在托管两者的服务器上的事件日志中没有消息。我添加了日志记录以验证服务是否正在完成它的逻辑,它是(大约需要6分钟)。我所有的超时都远高于他们的需要。我开始认为问题可能是频道正在关闭,并且由于非常高的超时,还没有抛出错误。具有潜在相关性的工作流是异步调用wcf服务,然后在AsyncWaitHandle上使用WaitOne()。我觉得这可能不是最好的主意,但我不确定它是否会导致这个问题。此外,工作流上没有设置持久性(我之前认为unloadOnIdle设置可能导致从被调用服务获取返回值的问题,因为我不清楚它应该如何工作)。 / p>

非常感谢任何帮助/建议。

3 个答案:

答案 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服务已正确配置为使用自己的工作进程,因此它将正确返回,但不再运行应用程序。