使用提升的上下文属性配置出站 WCF 消息正文

Posted

技术标签:

【中文标题】使用提升的上下文属性配置出站 WCF 消息正文【英文标题】:Configuring Outbound WCF message body with promoted context properties 【发布时间】:2019-05-05 16:27:59 【问题描述】:

我有一个发送端口,用于接收具有一组提升的上下文属性的文档。发送端口上的适配器设置为 WCF-SQL,并已配置为连接到 SQL 服务器。

唯一缺少的部分是配置消息选项卡,以便将正确的消息发送到数据库。现在我只是有一些硬编码的值以及消息本身:

<bizSaveDocument xmlns="http://schemas.microsoft.com/Sql/2008/05/Procedures/dbo">
   <conversationID>547e0702-c0c8-4535-9ab0-fa52b2fdbdd0</conversationID>
  <dataType>OIO</dataType>
  <fromID></fromID>
  <toID></toID>
  <msgInfoExtension><![CDATA[<infoExt><fileInfo fileName="ublinvoice.xml" encoding="utf-8" /></infoExt>]]></msgInfoExtension>
  <msgBody><bts-msg-body xmlns="http://www.microsoft.com/schemas/bts2007" encoding="string"/></msgBody>
  <msgBodyBin></msgBodyBin>
</bizSaveDocument>

我不确定如何将我提升的上下文属性正确插入到这些元素中。要了解我想在哪里配置此 XML,请参见下面的屏幕显示:



我不能使用 body 选项,因为我需要在数据库中插入一些提升的属性。查看 MSDN 似乎没有说明如何完成此操作。见此链接:https://docs.microsoft.com/en-us/biztalk/core/specifying-the-message-body-for-the-wcf-adapters

对于接收消息,我创建了一个管道组件,它提升了所需的属性并且工作正常。

这在标准 Biztalk 中是不可能的吗?如果没有,我将需要创建一个额外的管道组件来处理发送。

【问题讨论】:

好吧,等等。这似乎根本不对。你能列出你预期过程的步骤吗,比如 1. 2. 3. 我不会做你在这里列出的任何事情,比如 Messages 选项卡。是的,您可以将消息中的属性获取到出站消息中,但不是这样。 【参考方案1】:

啊,好吧,我明白你在做什么......所以....不要这样做。

处理此问题的最佳且基本正确的方法是使用带有地图和业务流程的正常 BizTalk 流。请记住,使用 Orchestration 没有任何问题,如果有人告诉您不要使用 Orchestration,那么他们就是错的。*

基本上,使用临时值映射到您的 SQL 架构,然后使用可分辨字段从上下文中设置它们。

永远不要打扰消息选项卡,它基本上是将代码隐藏在不应该出现的地方。

如果他们仍然让你以其他方式去做,你需要告诉你的管理层这将花费你大约两倍的时间来实施,因为你必须创建一个复制内置功能的反模式。

【讨论】:

感谢您的解释。在地图中“使用临时值”是什么意思?我会尽量避免使用消息标签。 @Leth 您必须在 Map 中使用临时值,例如 TEMPFILENAME,在输出中创建元素,然后您可以使用可分辨字段或 xpath() 对其进行设置。

以上是关于使用提升的上下文属性配置出站 WCF 消息正文的主要内容,如果未能解决你的问题,请参考以下文章

如何使 MDB 激活规范上下文属性可配置?

在模拟上下文之外调用 WCF 服务?

在未提升的上下文中执行代码

将 WCF 与负载平衡 (AWS) 一起使用时,安全上下文令牌无效

异常消息是在数据上下文类型上有一个*** IQueryable 属性,其元素类型不是实体类型

WCF OperationFormatter 遇到无效的消息正文