使用BizTalk 2013r2 CU1,我为入站xsd创建了属性架构并部署了应用程序。BizTalk - 无法提升属性
当我使用标准的“xml receive”管道接收到一个示例xml文档时,我可以看到所需的元素被按照预期提升到上下文中。
然后我创建了一个自定义管道,其中包含“反汇编”阶段中的“XML反汇编程序”组件和“验证”阶段中的自定义组件。这个自定义组件需要从上下文中读取提升的属性。但是,我发现当我将接收位置从“xml receive”管道切换到自定义管道时,我的属性没有得到提升。我用我的自定义组件中下面的代码写出来的项目在消息上下文的列表:
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));
从事件输出日志,我可以看到,某些性能,如消息类型得到了推广,但我自定义属性没有。同样,如果我将接收位置改回到使用标准的“xml接收”管道,那么属性将从同一个xml文档的副本升级(我通过停止订阅发送端口并从管理控制台查看上下文来检查该属性)。
我觉得这很奇怪,因为在相同的(默认)配置下,两个管道的“反汇编”阶段中存在相同的“XML反汇编程序”组件。我开始认为2013r2CU1可能存在问题 - 是否有其他人遇到过相同的问题?
感谢您的详细回复加里,我想你可能是对的。我现在的问题是如何连接它。据我所知,AfterLastReadEvent委托不接受管道上下文 - 我需要能够访问。我对代表没有太多经验 - 你知道在事件发生时是否可以通过管道上下文吗? –
@RobBowman是的,有可能。我已经更新了我的答案。我假设你想传递消息上下文而不是管道上下文。 –
感谢您的更新加里。对不起,这让我很长时间,但目前我每天早上只有20分钟的时间来处理这个问题。你知道一个链接到一个EventingReadStream的例子吗?我一直无法找到一个。在我的“DoSomething”事件中,我现在拥有执行所需映射的代码。我现在的问题是我不知道如何将其分配回流。我应该将流作为ref参数传递给事件,那么对它的任何更新都会使它成为BizTalk的方式? –