这是关于Workflow Foundation(.NET 3.5)的一般性问题,并对其使用的数据进行版本控制。我们有很多自定义活动可以处理一些数据,这些数据对于已经完成的工作流的未来分析也很有趣(前提是我们以一种序列化形式存储它的方式配置跟踪)。
可能有必要在UI中显示过去的数据,但数据不可避免地会改变结构(类定义/内部结构,如果它是动态的),并且我们库的重新部署版本将包含新的数据定义,而跟踪数据库中的序列化数据仍将保留在旧结构中。
使用不从一开始就改变的动态结构(比如属性包)或者稍后处理重新部署以及以某种方式将序列化BLOB转换为新的动态结构是否更好?您是否曾在类似场景中使用过某种方法?
答案 0 :(得分:1)
很大程度上取决于您部署应用程序的方式。如果使用强名称并部署到GAC或多个专用程序集路径,则反序列化工作流将反序列化类的确切版本。这意味着您的代码必须能够使用多个版本,这可能会有点痛苦。将数据存储在属性包中并不会对您有所帮助。如果您使用程序集重定向指向当前版本的活动解决该部分,我想使用属性包会使生活更简单。也就是说,到目前为止,我倾向于坚持依赖属性和常规可序列化类。
我做了一系列关于长时间运行的工作流程和版本控制的博客文章,其中遇到了完全相同的问题。查看here了解详情。