【发布时间】:2011-05-14 11:04:17
【问题描述】:
我正在开发一个应用程序,它使用在 Windows Workflow Foundation 4 中构建的状态机来控制多个应用程序层的工作流。在大多数情况下,工作流执行得非常好,但是在添加 sqlWorkflowInstanceStore 时出现了意想不到的问题。
更具体地说,当作为工作流服务运行时,一些必要的数据(ActiveBookmarks、ExecutionStatus、IsInitialized、IsSuspended 和一些其他字段)不会在工作流持久化时保存到数据库中。
我花了几天时间对此进行调试才发现,当使用完全相同的设置运行完全相同的工作流时,但作为自托管活动,而不是工作流服务,一切都可以顺利执行。这让我相信问题出在服务器/主机配置的某个地方。
我将尝试根据这些指南在不同的配置下托管以及在 IIS 中托管活动:
Hosting a self-hosted WF in IIS
http://msdn.microsoft.com/en-us/library/ff729688.aspx
但是,如果有人能指出导致此错误的更具体原因,我将不胜感激,因为这是目前我们发布之前需要解决的最大问题。
【问题讨论】:
-
也许您可以提供一些有关正在发生的错误的信息。到目前为止,您只是告诉我们没有发生的事情,而且几乎没有什么可继续的。尝试添加一个跟踪侦听器并检查跟踪文件中弹出的错误。
-
我运行了跟踪监听器,得到的消息如下:“InstancePersistenceCommand 的执行被中断,因为实例 '42b5db91-3529-4fd6-8db8-2bc42312bc76' 尚未持久化到实例存储。”但是,具有相关键的实例存在于数据库中。正如我之前提到的,它缺少几个字段。日志中没有其他异常或错误。
-
听起来问题出在原始持久性上。我确信那里会抛出一个异常,并且希望它是因为您在工作流中使用了一种未标记为可序列化的类型。
-
有人能用这个吗?我在 WF 中也遇到了一些关于持久性和状态机的奇怪问题。它根本没有持续存在,我不明白为什么。
标签: .net wcf iis workflow-foundation-4