1

似乎一旦将 Ocean Workstep 派生类发布到生产环境(并被客户端使用),它的名称、命名空间和程序集名称就会被有效地锁定以供将来更新(以确保向后兼容性)。

保存 Petrel 项目时,工作步骤引用将保存为二进制文件 Classes.ptd 中的完整类型名称(命名空间、类、强程序集名称)。在加载过程中,如果无法解析确切的类型名称(程序集版本似乎被忽略),则工作步骤在工作流编辑器中显示为“工作步骤不可用”。

在我们遇到的其他二进制序列化实例中,Petrel 使用已SerializationBinder注册的PetrelSystem.ProjectSerializationService- 对于 Workstep 实例并非如此。

有没有其他方法可以促进 Workstep 类/命名空间/程序集重命名?

为什么这种行为的记录如此糟糕(如果有的话)?我们是不是误会了什么?

4

1 回答 1

3

这个问题实际上将通过 Ocean 2012.1 API 得到修复。工作步骤参考将不再包含版本号:工作步骤和流程序列化都已清理。版本号未序列化(也未用于反序列化),可以使用 UniqueId 代替类型名称。

这是关于该主题的 2012.1 Ocean 发行说明的摘录。

流程和工作步骤唯一 ID 命名空间:Slb.Ocean.Petrel.Workflow

通过 Ocean 创建的流程和工作步骤直到现在还没有正确的标识符。它们由包括版本号的完整类型名称标识,这意味着它们的标识符可能会改变,例如,如果: - 插件程序集的版本号增加(例如新插件安装)。- 流程/工作步骤类已移至新程序集。- 流程/工作步骤类的命名空间已更改。这可能会导致 Petrel 出现问题,例如在“收藏夹”树中显示“断开的链接”而不是流程名称,或者在工作流编辑器中显示为“工作步骤不可用”的工作步骤。

为了解决这个问题,Ocean 已经从流程和工作步骤标识符中删除了版本号,并提供了一个新的 API 来支持自定义流程和工作步骤的用户定义标识符,该标识符在 Petrel 应用程序中是唯一的。通过 Ocean 创建的任何流程/工作步骤现在都应该实现一个唯一标识符。

请参考: -Process.UniqueId定义流程Workstep.UniqueId的唯一标识符 - 定义工作步骤的唯一标识符。新 API 还为已经序列化的流程/工作步骤提供向后兼容性支持,并在序列化逻辑中进行了一些更改。当打开遗留项目时,旧样式的 id 在反序列化过程中会自动替换为新的 id。

最好的问候,盖尔

于 2012-03-20T16:34:18.837 回答