【问题标题】:Modifying a Biztalk message from custom code从自定义代码修改 Biztalk 消息
【发布时间】:2013-03-18 18:00:06
【问题描述】:

免责声明:我是一个完整的 biztalk 新手。

我需要能够阅读并可能编辑 biztalk 消息中的 4 个节点;最好这需要从 c# 助手类中完成,因为我正在进行服务调用并且还为此编写了单元测试。

我已经连接了这个类,它与 XLANGMessage 类一起工作,我遇到的问题是在编排中的这一点,消息是基于模式的类型,我似乎没有任何办法修改它。

我已经阅读并找到了一些想法,但无法确认其中任何一个是否可以在自定义代码中发挥作用。

【问题讨论】:

    标签: biztalk


    【解决方案1】:

    1 编写一个映射来将传入的消息转换为所需的类型

    或

    2 在你的帮助组件中写这样的东西来转换消息

    公共 XmlDocument TransformMessage(XLANGMessage 消息)

    然后将结果文档传递给 message assignment 形状的 biztalk 消息。

    responseMessage = xmlDocument;

    如果您pass streams instead of messages around,您可能会获得更好的性能。

    【讨论】:

      【解决方案2】:

      您可以轻松地将消息传入和传出 C# 助手类。最简单的方法是将输入参数和返回值视为 System.Xml.XmlDocument 类型。 XLANG/s 引擎将安全地从 XLANGMessage 类型来回转换为 XmlDocument。

      由于您实际上是在创建消息的“新”实例(消息在 BizTalk 中是不可变的),因此需要在消息分配形状中执行对助手类的调用,外部构造形状构造您的副本原始消息。

      public static XmlDocument UpdateMyMessage(XmlDocument sourceMessage)
      {
        /* Do stuff to your Message here */
      
        return sourceMessage;
      }
      

      要考虑的最佳实践是将所有 C# 辅助方法声明为静态。这将避免在脱水期间对帮助程序类进行反序列化/序列化的任何问题。

      【讨论】:

      • 感谢您澄清引擎处理 XLANGMessage 和 XmlDocument 之间的转换,我将能够清理我非常清楚的代码。最后也是我缺少的消息分配形状。
      • 是否有可能在不使用通用 XmlDocument 类型的情况下保持此方法的便利性以伪造可变性?我需要先使用map构造消息,然后循环修改节点。
      【解决方案3】:

      BizTalk 消息是不可变的吗?

      不过,一般来说,通过创建“纠正性”编排并在传入消息参数上使用按引用传递选项,可以修改现有消息。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-08-28
        • 1970-01-01
        相关资源
        最近更新 更多