我有一个带有多个Persist操作的标准WCF服务工作流程(所有这些都是通过UI拖放创建的)。大多数坚持不懈的行动都成功了,但其中一个失败了。
在Try / Catch块中包含失败的Persist操作无济于事 - 它只是跨过捕获并终止工作流。
如何找到持久性失败的具体原因?是否记录了任何异常?
我正在开发Windows XP。
答案 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事件日志中查看错误。通常问题在于,某些状态是您的工作流程不可序列化。