如何获得导致Persist操作失败的异常?

时间:2011-02-25 09:52:12

标签: .net-4.0 workflow-foundation-4

我有一个带有多个Persist操作的标准WCF服务工作流程(所有这些都是通过UI拖放创建的)。大多数坚持不懈的行动都成功了,但其中一个失败了。

在Try / Catch块中包含失败的Persist操作无济于事 - 它只是跨过捕获并终止工作流。

如何找到持久性失败的具体原因?是否记录了任何异常?

我正在开发Windows XP。

3 个答案:

答案 0 :(得分:7)

我将异常记录在一个向System.Activities.DurableInstancing命名空间添加侦听器的文件中,您将能够在那里看到异常:

<system.diagnostics>
    <sources>
      <source name="System.Activities.DurableInstancing" switchValue="Verbose">
        <listeners>
          <add name="textListener" />
          <remove name="Default" />
        </listeners>
      </source>
    </sources>
    <sharedListeners>
      <add name="textListener" type="System.Diagnostics.TextWriterTraceListener" initializeData="c:\Log\persistenceproblem.txt" traceOutputOptions="ProcessId, DateTime" />
    </sharedListeners>
    <trace autoflush="true" indentsize="4">
      <listeners>
        <add name="textListener" />
      </listeners>
    </trace>
  </system.diagnostics> 

在我的博客中对此进行了解释 http://pablocastilla.wordpress.com/2012/05/18/how-to-analyze-a-workflow-foundation-4-0-persistence-problem/

答案 1 :(得分:3)

要获取基础错误的具体详细信息,请在调试模式下运行工作流(或附加到w3wp.exe)。在Visual Studio中,确保在Debug&gt;中未启用“Just My Code”选项。选项和设置,并确保启用调试&gt;例外&gt;公共语言运行时异常。然后IDE会在您单步执行时给出错误。

事情是 - 您无法在生产服务器上执行此操作,因此如果在跟踪事件中仅给出高级别消息,则不确定如何在生产中获取详细的错误信息。

答案 2 :(得分:2)

添加ETWTracingParticipant可以帮助您在Windows事件日志中查看错误。通常问题在于,某些状态是您的工作流程不可序列化。