BizTalk动态反汇编程序问题 - 正文部分为NULL

时间:2013-12-13 08:06:33

标签: c# biztalk business-rules biztalk-schemas

我从这里开始使用解决方案http://social.technet.microsoft.com/wiki/contents/articles/20547.biztalk-server-dynamic-schema-resolver-real-scenario.aspx 除发送端口外,它与我的场景完全匹配,但这不是必需的。我需要接收端口来选择文件并应用架构来反汇编。从他们的编排中进行映射,一些是定制的,等等。

我已经完成了教程中的所有内容,但我一直收到以下错误。 “执行接收管道失败...正文部分为NULL”

我从教程中得到的但不相信它们应该成为问题的是:

  1. 我创建了一个新的解决方案和项目来制作custompipeline组件(参考图19),从而创建了dll文件。意思是它在它自己的命名空间上。但是,从教程中看起来他们在主biztalk解决方案中创建了项目(即具有管道和业务流程的解决方案),因此命名空间具有“TechNetWiki.SchemaResolver”。在里面。我应该让custompipeline组件具有我的主要解决方案的命名空间吗?我认为这应该无关紧要,因为我应该能够在其他解决方案中使用此组件,因为它是与biztalk应用程序相关的业务规则的通用。

  2. 我没有的另一件是图15中的“THEN Action”,它们等于他们想要反汇编的目标架构,但是他们将#Src1放在“{{3”的末尾}}”。什么是#Src1?

2 个答案:

答案 0 :(得分:0)

在您链接到的示例中,管道组件的探测方法是将文件名中的前4个字符推送到键入的消息中,然后将其传递到规则引擎中。它的4个字符与示例中的“SRC1”匹配。

string srcFileName = pInMsg.Context.Read("ReceivedFileName", "http://schemas.microsoft.com/BizTalk/2003/file-properties This link is external to TechNet Wiki. It will open in a new window. ").ToString();
srcFileName = Path.GetFileName(srcFileName);

//Substring the first four digits to take source code to use to call BRE API
string customerCode = srcFileName.Substring(0, 4);

//create an instance of the XML object
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.LoadXml(string.Format(@"<ns0:Root xmlns:ns0='http://TechNetWiki.SchemaResolver.Schemas.SchemaResolverBRE This link is external to TechNet Wiki. It will open in a new window. '>
    <SrcCode>{0}</SrcCode>
    <MessageType></MessageType>
    </ns0:Root>", customerCode));
//retreive source code in case in our cache dictionary
if (cachedSources.ContainsKey(customerCode))
{
   messageType = cachedSources[customerCode];
}
else
{
TypedXmlDocument typedXmlDocument = new TypedXmlDocument("TechNetWiki.SchemaResolver.Schemas.SchemaResolverBRE", xmlDoc);
Microsoft.RuleEngine.Policy policy = new Microsoft.RuleEngine.Policy("SchemaResolverPolicy");
                    policy.Execute(typedXmlDocument);

因此匹配规则基于文件名的前4个字符。如果一个不匹配,则探测器返回false - 即无法识别。

最后一部分是消息类型被推送到返回的消息中 - 这个is made up of命名空间和根模式节点带有#separator - 所以你的#src1是根节点。

答案 1 :(得分:0)

  • 您需要在类附近实现IProbeMessage 我忘了在文章的代码中添加IProbeMessage。它现在更新。 但它是样本源代码

  • Src1是架构的根节点名称。我在文章中提到消息类型是TargetNamespace #Root

我建议下载示例代码

我希望这会对你有所帮助