使用 BizTalk 2013r2 CU1,我为我的入站 xsd 创建了一个属性架构并部署了应用程序。
当我使用标准的“xml 接收”管道接收示例 xml 文档时,我可以看到所需的元素已按预期提升到上下文中。
然后,我创建了一个自定义管道,该管道在“Disassemble”阶段包含“XML disassembler”组件,在“Validate”阶段包含一个自定义组件。这个自定义组件需要从上下文中读取提升的属性。但是,我发现当我将接收位置从“xml 接收”管道切换到我的自定义管道时,我的属性不会得到提升。我在我的自定义组件中使用以下代码来写出消息上下文中的项目列表:
for (int x = 0; x < contextList.CountProperties; x++)
{
contextList.ReadAt(x, out name, out nspace);
string value = contextList.Read(name, nspace).ToString();
contextItems += "Name: " + name + " - " + "Namespace: " + nspace + " - " + value + "\r\n";
if (name == _ContextPropertyName && nspace == _ContextPropertyNamespace)
promotedPropFound = true;
}
Helpers.EventLogHelper eventHelper = new EventLogHelper();
eventHelper.LogEvent(string.Format("Context items:{0}", contextItems));
if (promotedPropFound == false)
throw new Exception(string.Format("Unable to find promoted property with name[{0}] and namespace [{1}]", _ContextPropertyName, _ContextPropertyNamespace));
从事件日志的输出中,我可以看到某些属性(例如 MessageType)已被提升,但我的自定义属性没有。同样,如果我将接收位置改回使用标准的“xml 接收”管道,则该属性将从同一个 xml 文档的副本中提升(我通过停止订阅发送端口并从管理控制台查看上下文来检查这一点)。
我觉得这很奇怪,因为相同的“XML 反汇编器”组件存在于两个管道的相同“反汇编”阶段,具有相同的(默认)配置。我开始认为 2013r2CU1 可能存在问题 - 还有其他人遇到过同样的问题吗?