我有两个数据库
我在这两个数据库中都有一个程序dbo.Procedure
。
我正在使用"消费适配器服务"为了从BizTalk执行这些过程。
执行时我收到错误:
发送给适配器的响应消息" WCF-Custom"在接收位置: xxx ...原因:无法找到文件 规范,因为多个模式匹配消息类型 http://schemas.microsoft.com/Sql/2008/05/TypedProcedures/dbo#Procedure"
如果不在DB1或DB2中重命名过程,如何解决此问题?
答案 0 :(得分:1)
使用相同的root +命名空间部署Schema并没有错,有时候,这种情况是不可避免的。
答案 1 :(得分:0)
我会避免使用相同的targetNamespace
和根节点名称部署任何模式 - 但如果必须将TypedProcedure
类型与WCF-SQL / Custom一起使用,则无法执行此操作适配器(一个或多个)。
解决方法:
TypedProcedure
。请注意,您可以根据需要使用Procedure
或XmlProcedure
,特别是如果您未处理返回的结果集(例如,如果只返回代码或proc实际上是返回XML,例如SELECT ... FOR XML ...
)。实际上,如果您从proc(s)返回XML,那么最好使用XmlProcedure
为该结果使用强类型模式。如果他们只是返回常规回报值,我更愿意做... bts.Db1Procedure
的DB1上创建一个新的proc(我喜欢将BizTalk特定的过程放在一个名为bts
的模式中,以便DBA意识到它的用途是什么,但这可以用于{ {1}}同样如此)。让此过程采用相同的参数,然后将它们传递给dbo
。重新生成/修改您的架构以指向此过程而不是冲突的过程。要记住的是,适配器使用dbo.Procedure
和根节点名称来确定
答案 2 :(得分:0)
对于简单的BizTalk场景,另一种方法是使用CompositeOperation架构。 这样,您就可以避免必须从存储过程中部署架构。
在" Composite" -schema中,您可以添加所有其他受支持的SQL操作。 您的发送端口上的操作将是" CompositeOperation"。
您的Composite-schema看起来像这样: Composite Operation
出于开发目的,您仍然可以为存储过程生成架构,因为它将帮助您完成XSLT,但您不必再在BizTalk中部署它。
另请注意,使用BizTalk Mapper而不是自定义XSLT时,此方法不起作用。