在 Biztalk 编排中创建新消息的最佳方式是啥?
Posted
技术标签:
【中文标题】在 Biztalk 编排中创建新消息的最佳方式是啥?【英文标题】:What is the best way to create a new message within a Biztalk Orchestration?在 Biztalk 编排中创建新消息的最佳方式是什么? 【发布时间】:2010-09-23 17:14:40 【问题描述】:我正在寻找基于预定义 XSD 架构创建新消息实例的最佳解决方案,以便在 Biztalk 编排中使用。
对于带有清晰有效示例的答案或带有高质量参考链接的答案,会获得额外的投票。
【问题讨论】:
【参考方案1】:当想要在 BizTalk 业务流程中创建消息的新实例时,有多种选择。
我已经描述了我通常最终使用的三个,并在答案的底部添加了一些链接。
如何定义最好的方法真的取决于 - XMLDocument 方法在某些方面是最整洁的,除了如果您的架构发生更改,它可能会在您不知情的情况下中断。 Scott Colestock 描述了一些降低风险的方法。
BizTalk 映射方法可能是最容易理解的方法,并且在架构更改时不会中断。对于小型架构,这可能是一个不错的选择。
对于所有这些方法,需要记住的重要一点是,如果您想使用可区分字段或提升的属性,您将需要创建空元素来填充。如果您尝试为缺失的元素赋值(即使这些元素可能是可选的),您将遇到运行时 XLANG
错误
BizTalk 地图
最简单的选择是只使用 BizTalk 映射 - 您甚至不必将任何内容映射到创建的实例中。
要创建空元素,您只需映射一个带有空字符串参数的字符串连接functoid。
将一条消息分配给另一条消息
如果您想创建消息的新实例,您可以简单地将一条消息复制到具有相同架构的另一条消息中,采用消息分配形状。
使用 XMLDocument 变量
为此,您创建XMLDocument
类型的编排变量,然后在message assignment
中使用LoadXML
方法加载与您的架构匹配的XML sn-p。然后将 XMLDocument
分配给所需的 BizTalk 消息。
varXMLDoc.LoadXml(@"<ns0:SomeXML><AnElementToPopulate></AnElementToPopulate></SomeXML>");
msgYourMessage = varXMLDom;
包含AnElementToPopulate
允许您使用属性提升来分配给它。
我很少突然想起执行此操作的语法,this 是我用来提醒自己语法的博客条目。
另一个链接here详细介绍了一些方法。
【讨论】:
【参考方案2】:您到底在寻找什么?它只是创建具有固定内容的新消息(如某种模板)吗?还是基于别的东西?您确实需要澄清问题并更具体地获得正确的答案。
如果您指的是基于某种硬编码内容(或接近)从头开始创建消息,那么我发现将它们作为嵌入式资源放入辅助 C# 程序集中是一种非常简洁的方式这样做。
【讨论】:
【参考方案3】:要创建新消息,您只需创建一个新的System.Xml.XmlDocument
并将其分配给消息变量即可。您可以使用它的Load
或LoadXml
方法来加载符合架构的所需内容。
【讨论】:
【参考方案4】:本教程可能会有所帮助:
BizTalk Server 2006 教程 - 过程演练 使用 BizTalk Server 2006 R2 和 Windows Communication Foundation 创建具有合同优先设计的服务
http://dotnet.sys-con.com/node/647092
【讨论】:
【参考方案5】:查看我的博文 - Fun with Message Creation in BizTalk - 了解各种选项之间的基本性能比较。
【讨论】:
博客似乎已关闭。【参考方案6】:xsd.exe /classes /namespace:MyNamespace myschemafile.xsd
您可以使用它为给定的模式文件生成 c# 类。结果是一个 .cs 文件,您可以将其包含在您的一个解决方案项目中。
在“消息分配形状”中使用时,您可以实例化这些生成的类之一,为其所有属性填写值,然后最终将消息部分分配给您的实例。 Biztalk 将为您自动神奇地序列化实例。尼斯和OO。不需要任何花哨的 xlang 东西。
对于其他一些解决方案,例如使用硬编码的 XML 加载临时 XmlDocument,或者全力以赴并使用其他人建议的 documentSpecification.GetDocSchema().CreateXmlInstance(),我真的不太幸运。
【讨论】:
以上是关于在 Biztalk 编排中创建新消息的最佳方式是啥?的主要内容,如果未能解决你的问题,请参考以下文章
BizTalk SMTP 发送带有附件的邮件(无编排,自定义发送管道组件)