我正在寻找基于在Biztalk业务流程中使用的预定义XSD架构来创建新消息实例的最佳解决方案。
额外投票以清晰的方式回答答案有效的例子或答案与质量参考链接。
答案 0 :(得分:16)
当想要在BizTalk业务流程中创建新的消息实例时,有几个选项。
我已经描述了我通常最终使用的三个,并在答案的底部添加了一些链接。
如何定义哪种方法真正依赖于最佳方法 - XMLDocument方法在某些方面是最整洁的,除非您的架构发生更改,否则在您不知情的情况下可能会中断。 Scott Colestock描述了一些降低风险的方法。
BizTalk Mapping方法可能是最简单的方法,并且在架构更改时不会中断。对于小型模式,这可能是一个不错的选择。
对于所有这些方法,要记住的一件重要事情是,如果要使用可分辨字段或提升属性,则需要创建要填充的空元素。如果您尝试将值分配给缺少的元素(即使这些元素可能是可选的),您将遇到运行时XLANG
错误。
最简单的选择是只使用BizTalk映射 - 您甚至不需要将任何内容映射到创建的实例中。
要创建空元素,您只需使用空字符串参数映射字符串连接functoid。
如果要创建消息的新实例,只需将一个消息复制到消息分配形状中的同一模式的另一个消息即可。
为此,您创建类型为XMLDocument
的业务流程变量,然后在message assignment
中使用LoadXML
方法加载与您的架构匹配的XML代码段。然后,将XMLDocument
分配给所需的BizTalk消息。
varXMLDoc.LoadXml(@"<ns0:SomeXML><AnElementToPopulate></AnElementToPopulate></SomeXML>");
msgYourMessage = varXMLDom;
包含AnElementToPopulate
允许您使用属性提升分配给它。
我很少记得在我的脑海中执行此操作的语法,this是我转到博客条目以提醒自己的语法。
另一个链接here详细介绍了一些方法。
答案 1 :(得分:2)
你到底想要什么?它只是创建一个具有固定内容的新消息(如某种模板)?还是基于别的东西?你真的需要澄清问题,并更具体地得到正确的答案。
如果您指的是仅仅基于硬编码内容(或接近)从头开始创建消息,那么我发现将它们作为嵌入式资源放在帮助程序C#程序集中是一种非常干净的方式正在做。斯科特·科尔斯托克(Scott Colestock)对这项技术非常good explanation。
答案 2 :(得分:1)
要创建新消息,您只需创建一个新的System.Xml.XmlDocument
并将其分配给消息变量。您可以使用它的Load
或LoadXml
方法加载符合架构的所需内容。
答案 3 :(得分:1)
本教程可能会有所帮助:
BizTalk Server 2006教程 - 完成整个过程 使用BizTalk Server 2006 R2和Windows Communication Foundation以契约优先设计创建服务
答案 4 :(得分:0)
查看我的博文 - Fun with Message Creation in BizTalk - 了解各种选项之间的基本效果。
答案 5 :(得分:0)
xsd.exe /classes /namespace:MyNamespace myschemafile.xsd
您可以使用它为给定的模式文件生成c#类。结果是一个.cs文件,您可以将其包含在一个解决方案项目中。
在“消息分配形状”中使用时,您可以实例化其中一个生成的类,为其所有属性填写值,然后最终将消息部分分配给您的实例。 Biztalk将为您自动神奇地序列化实例。尼斯和OO。不需要任何花哨的xlang东西。
我对其他一些解决方案并没有太多的好运,比如用硬编码的XML加载临时XmlDocument,或者使用其他人建议的documentSpecification.GetDocSchema()。CreateXmlInstance()。 / p>