xml - BizTalk 信封架构自关闭节点

标签 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>

另存为

<?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"/>

然后我收到错误信息

Source: "XML disassembler" Receive Port: "InLocation" URI: "c:\MyLocation*.xml" Reason: Unexpected event ("eos") in state "processing_header".

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

<?xml version="1.0" encoding="utf-8"?>
<MyEnvelope xmlns="MyNameSpace"></MyEnvelope>

我没有收到任何错误。我的处理不受这些错误的影响,但它肯定会对性能产生一些影响,并且会在 Group Hub 挂起的实例 View 中乱扔垃圾。

BizTalk 似乎将自闭合节点解释为空格而不是 null。这似乎链接到 my issues with attempting to call a service with no parameters我需要发送一个自关闭节点,但 BizTalk 什么也没发送。

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

最佳答案

他们似乎经常改变处理空白的行为。参见 Change in Default Whitespace Behavior in BizTalk .我不确定您的问题是否相关,但值得一看。但是它没有提到 BizTalk 2013,但设置在主机中。如果您进行此配置设置,则需要专门为其设置一个主机,这样它就不会影响其他现有应用程序(如果有的话)。

安装以下更新之一会导致 BizTalk 更改默认行为以在映射期间保留 XML 中的空白:

  1. BizTalk 2010 CU1 或以上
  2. BizTalk 2009 CU3 或以上
  3. BizTalk 2006 R2 SP1 CU4 或以上
  4. 修补程序 2492255

在某些环境中,转换删除空格可能是首选。为了恢复到这种行为,可以采取以下步骤:

在 BizTalk 2010 中,这是在主机级别设置的:

  1. 打开 BizTalk Server 管理控制台
  2. 将 BizTalk 组展开到平台设置 > 主机
  3. 右键单击主机并选择“设置”
  4. 选中 Legacy whitespace behavior 旁边的复选框
  5. 点击确定
  6. 为此主机重新启动 BizTalk 主机实例

在 BizTalk 2009 和 2006 R2 中,此值是在每台计算机级别设置的:

  1. 打开注册表编辑器
  2. 在基于 x86 的计算机上找到并单击以下注册表子项: • HKEY_LOCAL_MACHINE\Software\Microsoft\BizTalk Server\3.0\Administration 对于基于 x64 的计算机,单击以下注册表子项: • HKEY_LOCAL_MACHINE\Software\Microsoft\BizTalk Server\3.0\Administration
    • HKEY_LOCAL_MACHINE\Software\Wow6432Node\Microsoft\BizTalk Server\3.0\Administration
  3. 右击并选择 DWORD 值。
  4. 键入 LegacyWhitespace 作为值名称,然后双击它并将值数据设置为 1。
  5. 退出注册表编辑器。
  6. 在此机器上重新启动 BizTalk 主机实例

关于xml - BizTalk 信封架构自关闭节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22766952/

相关文章:

azure - Biztalk 与 Azure 服务总线

biztalk - 我是否需要为 BizTalk 安装所有以前的累积更新 (cu)?

visual-studio-2008 - Visual Studio 2008 中 BizTalk 架构项目的引用问题

powershell - 适用于PowerShell BizTalk的esbimportutil.exe的替代

xml - 多个 XML 到 PDF : best approach

java - “ArrayAdapter requires the resource ID to be a TextView” 问题

xml - 如何使用 PowerShell 注释掉 XML 中的节点?

xml - 尝试使用 XML::LibXML 模块拆分 XML 文件时出错

c# - 服务实例将保持挂起状态,直到在出现错误异常类型初始值设定项后以管理方式恢复或终止

sql-server - 在 BizTalk 中使用存储过程插入/更新 SQL Server 表