在Biztalk Orchestration中创建新消息的最佳方法是什么?

我正在寻找最佳的解决方案,用于基于在Biztalk业务流程中使用的预定义XSD架构创建新的消息实例。

额外的投票通过质量参考链接获得明确有效的示例或答案的答案。

你究竟想要什么? 它只是创建一个具有固定内容的新消息(如某种模板)吗? 还是基于别的东西? 你真的需要澄清问题,并更具体地得到一个正确的答案。

如果您指的是仅仅基于硬编码内容(或接近)从头开始创建消息,那么我发现将它们作为嵌入式资源放在帮助程序C#程序集中是一种非常干净的方法。 Scott Colestock对这种技术有很好的解释 。

想要在BizTalk业务流程中创建消息的新实例时有几个选项。

我已经描述了我通常最终使用的三个,并在答案的底部添加了一些链接。

如何定义哪个是最好的方法真正依赖 – XMLDocument方法在某些方面是最整洁的,除非你的架构发生了变化,这可能会在你不知道的情况下中断。 Scott Colestock描述了一些降低风险的方法。

BizTalk Mapping方法可能是最容易理解的,并且在架构更改时不会中断。 对于小型模式,这可能是一个不错的选择。

对于所有这些方法,要记住的一件重要事情是,如果要使用可分辨字段或提升属性,则需要创建要填充的空元素。 如果您尝试将值分配给缺少的元素(即使这些元素可能是可选的),您将遇到运行时XLANG错误

BizTalk地图

最简单的选择是只使用BizTalk映射 – 您甚至不需要将任何内容映射到创建的实例中。

要创建空元素,您只需使用空字符串参数映射字符串连接functoid即可。

将一条消息分配给另一条

如果要创建消息的新实例,只需将一个消息复制到消息分配形状中的同一模式的另一个消息即可。

使用XMLDocument变量

为此,您创建一个XMLDocument类型的编排变量,然后在message assignment使用LoadXML方法加载与您的模式匹配的XML片段。 然后,您将XMLDocument分配给所需的BizTalk消息。

 varXMLDoc.LoadXml(@""); msgYourMessage = varXMLDom; 

包含AnElementToPopulate允许您使用属性提升来分配它。

我很少记得在我的脑海中做到这一点的语法, 这是我去博客条目提醒自己的语法。

另一个链接详细介绍了一些方法

要创建新消息,您只需创建一个新的System.Xml.XmlDocument并将其分配给消息变量。 您可以使用它的LoadLoadXml方法来加载符合架构的所需内容。

本教程可能会有所帮助:

BizTalk Server 2006教程 – 完成整个过程使用BizTalk Server 2006 R2和Windows Communication Foundation以契约优先设计创建服务

http://dotnet.sys-con.com/node/647092

查看我的博客文章 – BizTalk中的消息创建乐趣 – 用于各种选项之间的基本性能比较。

 xsd.exe /classes /namespace:MyNamespace myschemafile.xsd 

您可以使用它为给定的模式文件生成c#类。 结果是一个.cs文件,您可以将其包含在一个解决方案项目中。

在“消息分配形状”中使用时,您可以实例化其中一个生成的类,为其所有属性填写值,然后最终将消息部分分配给您的实例。 Biztalk将为您自动神奇地序列化实例。 很好,OO。 不需要任何花哨的xlang东西。

我对其他一些解决方案并没有太多的好运,比如用硬编码的XML加载临时XmlDocument,或者使用documentSpecification.GetDocSchema()。其他人建议的CreateXmlInstance()。