【发布时间】:2014-03-31 16:24:13
【问题描述】:
我创建了一个 BizTalk 接收位置,它有一个订阅发送端口,它接受封装的消息并仅使用 XML 接收管道拆分成单独的消息。
<?xml version="1.0" encoding="utf-8"?>
<MyEnvelope xmlns="MyNameSpace">
<MyData>ABC</MyData>
<MyData>DEF</MyData>
<MyData>GHI</MyData>
</MyEnvelope>
保存为
<?xml version="1.0" encoding="utf-8"?>
<MyData xmlns="MyNameSpace">ABC</MyData>
,
<?xml version="1.0" encoding="utf-8"?>
<MyData xmlns="MyNameSpace">DEF</MyData>
和
<?xml version="1.0" encoding="utf-8"?>
<MyData xmlns="MyNameSpace">GHI</MyData>
太棒了。
但是,当消息中没有元素时,服务会发送带有自闭合和空信封的消息:
<?xml version="1.0" encoding="utf-8"?>
<MyEnvelope xmlns="MyNameSpace"/>
我收到错误消息
来源:“XML 反汇编程序”接收端口:“InLocation”URI: “c:\MyLocation*.xml” 原因:处于状态的意外事件 (“eos”) “处理头”。
如果我手动创建一条不是自动关闭的消息:
<?xml version="1.0" encoding="utf-8"?>
<MyEnvelope xmlns="MyNameSpace"></MyEnvelope>
我没有错误。我的处理不受这些错误的影响,但它一定会对性能产生一些影响,并且会在 Group Hub 暂停实例视图中乱扔垃圾。
BizTalk 似乎将自闭合节点解释为空格而不是 null。这似乎与my issues with attempting to call a service with no parameters 相关联,我需要在其中发送一个自动关闭节点,但 BizTalk 什么也没发送。
处理没有内容的信封一定是一个常见问题。如何配置我的应用程序以使用自闭合信封节点接收和忽略这些消息?
【问题讨论】:
-
如果您从某个服务接收该消息,那么如果没有要发送的内容,您最好让该服务不发送任何内容:) 否则,如果您正在从数据库(?)轮询数据并使用 inboundOperationType = XmlPolling,那么您应该在接收位置(RL 绑定中的 xmlStoredProcedureRootNodeName 参数)中而不是在轮询语句中附加 MyEnvelope 标头。如果您没有要轮询的数据,那么您的轮询过程应该返回零行。
-
@ArsenMagomedov 如果您可以访问该服务,这没关系。信封实际上是一个集合。我假设它在迭代项目之前被初始化。如果我有权访问,我只能在有数据要返回的情况下初始化集合。这将解决我的问题,但并不能真正回答有关 BizTalk 的问题
标签: xml biztalk biztalk-2013