终于可以记录第一个总结了,因为这第一个 web 上的 wf3 小应用看来终于稳定。
回想一下,这过程可以说最近两年学习新技术时遇到的最大挫折。近一个月的时间里停在一个地方,一步也不能前进。
一开始进展顺利,从设计流程,连接业务,开动持久化,都顺利完成,在自己电脑上运行正常。
可一旦放服务器上,问题出现了:运行时不规则发出 abort,并且没有任何错误信息,包括 windows 事件里也不计。
然后就是每天搜索资料,也不知道是不是我关键字不对,几乎找不到有用资料,似乎整个 internet 上只有一两个人遇到我的问题,并且没有解决。
然后是自己摸索,一开始是设法记录日志,甚至开了跟踪,但不管如何 abort 事件里就是拿不到有用信息。
然后发现实例 abort 导致状态停止不变,但是状态改变后面的业务代码运行没问题,似乎被正常调用,而不是出错的实例调用的(为抓错误在 abort 里输出队列,发现触发事件一直在等待,但结果是触发事件后面的代码明明执行了——误导)
所以怀疑是多线程的问题,有另外一个运行时在运行,并且这个猜测得到支持——application 会回收的。最后确保了 运行时 的唯一——
但是仍然不成;
难题长时间卡住不能突破,开始怀疑 wf 是否不成熟一致没人用(资料少),开始想放弃时,无意搜索早就注意到,但是没有因为关注的一个错误:
WorkflowOwnershipException
Exception message: 此工作流不属于该 WorkflowRuntime。该 WorkflowRuntime 的所有权已失效,或者此工作流属于另一个 WorkflowRuntime。
网上介绍这个错误的文章似乎就一篇。进一步搜索 msdn,发现是 持久化 对象引出这个错误,再进一步发现多半是 锁定 引起。
霍然开朗,重新注册持久化服务,不再锁定。把已经存在测试数据的 锁定 字段清空,然后似乎,稳定了。
在研究自己记录的日志,发现 abort 总是在 空闲 事件以后出,而 空闲 时就要 持久化,所以,多半是 持久化 出问题了。
重新打开这个流程给用户,是否真的是这个原因,还待应用检验。
下午在测试几个流程