BizTalk 信封架构自闭合节点

miz*_*zle 5 xml biztalk biztalk-2013

我创建了一个 BizTalk 接收位置,它有一个订阅发送端口,该端口接受封装的消息并仅使用 XML 接收管道拆分为单独的消息。

<?xml version="1.0" encoding="utf-8"?>
<MyEnvelope xmlns="MyNameSpace">
    <MyData>ABC</MyData>
    <MyData>DEF</MyData>
    <MyData>GHI</MyData>
</MyEnvelope>
Run Code Online (Sandbox Code Playgroud)

被保存为

<?xml version="1.0" encoding="utf-8"?>
<MyData xmlns="MyNameSpace">ABC</MyData>
Run Code Online (Sandbox Code Playgroud)

,

 <?xml version="1.0" encoding="utf-8"?>
 <MyData xmlns="MyNameSpace">DEF</MyData>
Run Code Online (Sandbox Code Playgroud)

 <?xml version="1.0" encoding="utf-8"?>
 <MyData xmlns="MyNameSpace">GHI</MyData>
Run Code Online (Sandbox Code Playgroud)

这很棒。

但是,当消息中没有元素时,服务会发送带有自关闭和空信封的消息:

<?xml version="1.0" encoding="utf-8"?>
<MyEnvelope xmlns="MyNameSpace"/>
Run Code Online (Sandbox Code Playgroud)

我收到错误信息

来源:“XML 反汇编程序” 接收端口:“InLocation” URI:“c:\MyLocation*.xml” 原因:状态为“processing_header”的意外事件(“eos”)。

如果我手动创建一条非自动关闭的消息:

<?xml version="1.0" encoding="utf-8"?>
<MyEnvelope xmlns="MyNameSpace"></MyEnvelope>
Run Code Online (Sandbox Code Playgroud)

我没有错误。我的处理不受这些错误的影响,但它必须对性能产生一些影响,并且在 Group Hub 挂起的实例视图中乱扔垃圾。

BizTalk 似乎将自闭合节点解释为空格而不是空。这似乎与我尝试调用没有参数的服务有关,我需要发送一个自关闭节点,但 BizTalk 什么也不发送。

处理没有内容的信封一定是一个常见问题。如何配置我的应用程序以使用自关闭信封节点接收和忽略这些消息?

Joh*_*305 2

我还没有看到或验证过这种行为,但我相信你;)。

除非您每小时获得 10K 个文件或类似的情况,否则不必担心异常对性能的影响。

为了防止错误,您必须在管道组件中取消或重新格式化消息。