BizTalk 5803 错误
系统报错如下:
执行响应(接收)管道时出错:“Microsoft.BizTalk.DefaultPipelines.XMLReceive, Microsoft.BizTalk.DefaultPipelines, Version=3.0.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35”,源:“XML 拆装器”,发送端口:“SendTOS01Req_Port”,URI:“http://10.2.2.191:8888/aaaa/bbbb/cccc….asmx”,原因: 找不到该文档规范,因为有多个架构与消息类型“string”匹配。
英文版本就是
Cannot locate document specification because multiple schemas matched the message type。
其实我的biztalk应用程序的“架构”没有显示任何架构,如图:
这个报错真让我找不着头脑,没办法,既然报错提示有多个消息类型或者架构,那就说明真可能有多个架构或者类型存在,那就去查数据库吧:
SELECT *--msgtype
FROM bt_DocumentSpec
order by msgtype
果然,在结果集中,有两个“msgtype”为string的记录,在BizTalk中,消息类型名是由 命名空间#根节点名 组成的,而且不能重复,否则就会出现系统识别不了消息架构的情况。上述情况就是这样的例子。
那么原因很清楚了,当前应用程序的开发人员没有给消息加特别的类型名,这个一个string消息类型原来源,另外一个,就是因为安装了”BizTalk Benchmark Wizard”,这里面也有一个string的消息类型,唉~~~~~~
解决:删除一个就行了!或者改消息类型名。当然还有一种方法,通过自定义接收管道组件,添加XmlDisassembler来处理。
- Create a custom receive pipeline and add an XmlDisassembler to it.
- Set the “Document schemas” property of the XMLDisassembler by picking the schema(one among the 2 schemas with the same messagetype deployed) which you want to receive on this receive pipeline.
- Use this receivepipeline on the receive location. This way we are forcing the XMLDisassembler to use the schema we have provided rather then it trying to match one in the DocumentSpec table.