【问题标题】:Change a functiod value without redeploying orchestration?在不重新部署编排的情况下更改功能值?
【发布时间】:2015-07-28 19:21:57
【问题描述】:

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

【问题讨论】:

  • 一句话,没有。但是,有多种方法可以使其可配置,这样您以后就不会再遇到这个问题了。
  • 我对 biztalk 有点陌生。恐怕这就是答案。那么假设这些东西是用程序集编译的?我希望它可能存储在一个 biztalk 数据库中并且一直在寻找它。是的,应该将其更改为从某种配置中提取以作为预防措施,并且我对某些方法隐约熟悉。
  • 是的,它使用映射创建一个 XSLT 文件,包括硬编码值,并且 XSLT 文件作为字符串嵌入到程序集中,并且 XSLT 字符串在转换期间执行。所以不,你不能直接在 BizTalk DB 中更新它。
  • 您应该将其转换为实际答案,我会将其标记为答案。 :)
  • 如果我有时间,我稍后会写一个更完整的答案,给出不同的可配置选项,因为在我看来,“不,你不能这样做”不是一个正确的答案 :-) 因此我在评论中做到了。这里有一个答案,提供了一些选项,*.com/questions/23060889/… 但没有详细说明

标签: biztalk biztalk-2013


【解决方案1】:
  1. 此处的 BizTalk 最佳实践规定不同的工件类型应位于不同的项目中。这允许您只部署 Maps 程序集,就像这样(在取消登记任何直接使用地图的编排之后):

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 他正在从编排中调用地图。他仍然需要重新部署编排。
    • 否,如果编排在单独的程序集中并且由于地图更改不需要任何更改,则不需要
    • 啊,我真傻。你是对的。只需要取消编排。脑残。
    【解决方案3】:

    您有两种解决方案:
    1 - 就像@Vikas 之前所说的那样隔离地图并部署这个人工制品
    2 - 您可以而且应该将您的值设置为 SSO 存储,并在运行时在您的编排中检索它https://seroter.wordpress.com/2007/09/21/biztalk-sso-configuration-data-storage-tool/,因此根本不需要重新部署

    【讨论】: