我创建了一个 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” 原因:状态“processing_header”中的意外事件(“eos”)。
如果我手动创建一条不会自动关闭的消息:
<?xml version="1.0" encoding="utf-8"?>
<MyEnvelope xmlns="MyNameSpace"></MyEnvelope>
我没有错误。我的处理不受这些错误的影响,但它一定会对性能产生一些影响,并且会在 Group Hub 暂停实例视图中乱扔垃圾。
似乎 BizTalk 将自闭合节点解释为空格而不是 null。这似乎与我尝试调用没有参数的服务有关,我需要发送一个自关闭节点但 BizTalk 什么都不发送。
处理没有内容的信封一定是一个常见问题。如何配置我的应用程序以使用自闭合信封节点接收和忽略这些消息?