【发布时间】:2010-01-19 15:17:17
【问题描述】:
我在 ASP.NET 应用程序中使用了重新托管的工作流设计器来生成工作流的图像,基本上采用了 WorkflowMonitor 示例,类似于Atlas Workflow Monitor。现在,当安装的库版本不再与旧工作流定义中的原始版本匹配时,我开始担心重新部署后此解决方案的行为(尤其是来自数据库中包含工作流 XOML 的跟踪工作流和历史条目)过去执行)。值得注意的一件事是,我已经阅读了 article 关于同时使用多个版本的工作流程,这并不是我真正需要的,因为我真的不想使用旧定义运行工作流程,我只想展示他们的图表。我只看到了 2 个解决方案:
- 在工作流完成/终止时从工作流设计器截取屏幕截图,我仍然拥有库的实际版本,只需将其作为位图保存到数据库中。
- 将旧版本的库保存在单独的文件夹中,以便能够以某种方式将它们加载到设计器,这样即使其中的活动不再是当前程序集版本,它仍然可以从旧工作流生成图表。
由于我想避免浪费空间(解决方案 1),我决定先尝试解决方案 2。我找到了一些使用 WorkflowMarkupSerializer 或 WorkflowDesignSurface 的 TypeProvider 服务的示例并尝试使用它们。不幸的是,在新库中删除活动并且使用此 TypeProvider 加载旧库的情况下,如果直接使用 WorkflowMarkupSerializer 读取 XOML,它似乎无法正常工作,它只是从图表中排除丢失的活动,当使用 SqlTrackingService 加载一些旧的跟踪实例时,它会抛出一个异常,即缺少活动的类型(尽管在内部它似乎使用了相同的 WorkflowMarkupSerializer 方法)。
您是否对此有一些经验或提示如何使用 TypeProvider 可能会出错的地方?谢谢;)
【问题讨论】:
标签: c# .net workflow-foundation versioning