我从这里开始使用解决方案http://social.technet.microsoft.com/wiki/contents/articles/20547.biztalk-server-dynamic-schema-resolver-real-scenario.aspx 除发送端口外,它与我的场景完全匹配,但这不是必需的。我需要接收端口来选择文件并应用架构来反汇编。从他们的编排中进行映射,一些是定制的,等等。
我已经完成了教程中的所有内容,但我一直收到以下错误。 “执行接收管道失败...正文部分为NULL”
我从教程中得到的但不相信它们应该成为问题的是:
我创建了一个新的解决方案和项目来制作custompipeline组件(参考图19),从而创建了dll文件。意思是它在它自己的命名空间上。但是,从教程中看起来他们在主biztalk解决方案中创建了项目(即具有管道和业务流程的解决方案),因此命名空间具有“TechNetWiki.SchemaResolver”。在里面。我应该让custompipeline组件具有我的主要解决方案的命名空间吗?我认为这应该无关紧要,因为我应该能够在其他解决方案中使用此组件,因为它是与biztalk应用程序相关的业务规则的通用。
我没有的另一件是图15中的“THEN Action”,它们等于他们想要反汇编的目标架构,但是他们将#Src1放在“{{3”的末尾}}”。什么是#Src1?
答案 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
我建议下载示例代码
我希望这会对你有所帮助