记一个SharePoint Workflow一睡永不醒来的问题

使用Visual Studio创建了一个workflow, 把DLL部署到了BIN目录中. 结果发现workflow中如果有delay动作的话, 那么就睡下后永不再醒来.

错误信息说找不到workflow的程序集.

呵呵, workflow跟网页请求是由不同的exe处理的, 网页上发来的请求是w3wp.exe处理的, 而workflow是由owstimer.exe处理的. 而owstimer.exe是不知道有BIN这样一个目录存在供它寻找程序集的. 所以出现了上面的情况.

解决方法很简单, 把DLL部署到GAC里就可以了.

另外, KB953630描述了一个问题也比较典型. 本来有个V1.0的workflow, 已经部署到了生产环境中. 后来我们对这个版本进行了修改, 搞了个新的DLL, 但版本号还是V1.0。这样老的DLL文件就被覆盖了. 于是, workflow也有可能出现一睡不醒的情况. 解决方法是重启Timer Service, 但这仅对再新建的workflow有效, 老的出问题的workflow还是无法恢复的. 也算亡羊补牢了吧. 呵呵.

如果使用SharePoint Designer制作一个workflow, 其中包含有Pause for duration"(Pause for _ days, _ hours, _ minutes)这样的Action, 而且一旦停下就永不醒来, 那么我们需要安装一个.net framework 3.0的一个hotfix, KB932394. 安装之后, 停住的workflow就可以正常的恢复了.

参考资料

============

A workflow does not resume automatically when a delay activity is triggered in Windows SharePoint Services 3.0

http://support.microsoft.com/kb/953630

A timer does not resume operation after a workflow is reloaded in Microsoft Windows Workflow Foundation

http://support.microsoft.com/?kbid=932394

原文地址:https://www.cnblogs.com/awpatp/p/1854336.html