1

我有一个使用 AppFabric / Persistence 和 .net 4.0 的 WCF 工作流,我知道它会在代码活动中出现一些错误,因为它与外部soap 服务通信,当操作无法执行时,有时会抛出 SoapExceptions 作为返回值完成。这是不可避免的,并且从一开始就需要处理大量异常。

在开发过程中,当这些错误发生时,我的工作流程会暂停,我可以很容易地追踪错误,并为新发现的soap异常编写一个处理程序。问题是,在我对代码活动进行更改并发布新的 dll 后,暂停工作流的“恢复”不会利用这些更改,我也不能在恢复时中断代码。

工作流尝试运行 5 次,然后重新抛出相同的错误,即使它类似于抛出新异常(“TEST EXCEPTION”),然后我将其从代码中删除。

我不会更改工作流程的定义,只是对代码活动进行一些小改动。

我发誓我可以在 VS2010 中做到这一点,但是自从我切换到 vs2012 以来已经很长时间了。仅供参考,我可以调试尚未暂停的新工作流程。我可以单步执行代码。只是无法在恢复时调试。

4

2 回答 2

0

我怀疑你是否能够 - 我从我使用 VS2008 的经验中记得这一点。

我不记得究竟为什么会发生这种情况,但我认为你不能。当我们发布新代码时,我们在生产中做了什么,并且没有完成(和持久)工作流 - 我们在配置中添加了程序集绑定,它指向新代码。旧代码也存在。

这样的东西:

   <configuration>
   <runtime>
      <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
         <dependentAssembly>
            <assemblyIdentity name="myAssembly"
                              publicKeyToken="32ab4ba45e0a69a1"
                              culture="neutral" />
            <bindingRedirect oldVersion="1.0.0.0"
                             newVersion="2.0.0.0"/>
            <codeBase version="2.0.0.0"
                      href="http://www.litwareinc.com/myAssembly.dll"/>
         </dependentAssembly>
      </assemblyBinding>
   </runtime>
</configuration>

也很有帮助。

于 2013-03-28T20:59:04.580 回答
0

我可以通过使用 C:\Windows\Microsoft.NET\Framework\v4.0.30319\SQL\en\SqlWorkflowInstanceStoreSchemaUpgrade.sql 升级架构并更改为 .net 4.5 来恢复和调试

它可能不是最优雅的解决方案,但它确实有效。

我还想说,我个人讨厌这样的解决方案,尤其是在搜索它们之后。如果您来到这里并且无法部署 4.5,我深表歉意。

于 2013-04-23T17:24:26.290 回答