在不重新部署编排的情况下更改功能值?

Change a functiod value without redeploying orchestration?

我有一个简单的值映射 functoid,它在 Biztalk 转换中有一个硬编码的字符串值,我需要更改它。我宁愿不为这个值重新部署和回归测试整个编排。有什么方法可以在不重新部署编排的情况下在生产环境中更改它吗?

您应该将您的地图放在一个单独的程序集中,并且在安装时您只需要对地图程序集进行 GAC。根据您使用的部署模型,它可以改变您组装 GAC BizTalk 的方式。但是如果你只是以这种方式分离你的程序集,你可以隔离变化。

您有两个解决方案:
1 - 正如@Vikas 之前所说,隔离地图并仅部署此人工制品
2 - 您可以而且应该将您的值作为 SSO 存储并在运行时在您的业务流程中检索它 https://seroter.wordpress.com/2007/09/21/biztalk-sso-configuration-data-storage-tool/ 所以根本不需要重新部署

  1. 这里的 BizTalk 最佳实践规定不同的项目类型应该在不同的项目中。这允许您仅部署地图程序集,就像这样(在取消征用任何直接使用地图的编排之后):

    btstask AddResource /A:<ApplicationName> /T:System.BizTalk:BizTalkAssembly /Ov /So:Maps.dll /Op:GacOnAdd,GacOnImport,GacOnInstall
    
  2. 如果可能,将转换放在 端口 而不是编排中。这有助于缓解必须取消编排的问题,并且应该表现得更好,但并不总是实用(有时编排需要决定哪个映射,或使用多个映射,或......)。在这种情况下,您可以重新部署地图程序集并重新启动主机实例,而无需重新部署业务流程。

  3. 避免在映射和编排中硬编码值。将它们指向静态 C# 实用程序中的静态变量 class。无需重新部署映射或编排即可重新部署 C# 程序集(只需 GAC C# 程序集并重新启动主机实例)。 C# 程序集也可以指向一些其他存储,例如 SSO、数据库、WCF/Web 服务等