在 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 并将其分配给消息变量即可。您可以使用它的LoadLoadXml 方法来加载符合架构的所需内容。

【讨论】:

【参考方案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 - 传递通知上的路由失败

BizTalk SMTP 发送带有附件的邮件(无编排,自定义发送管道组件)

使用地图转换消息时出现 Biztalk 2020 异常

在现有项目中创建新的 lagom 微服务的 sbt 命令是啥?

在 magento 中创建新发票时的事件名称是啥?

创建具有多个输入架构的 BizTalk 映射