对于Solicit-Response发送端口中的BizTalk WCF-SQL适配器。如何让适配器像XmlPolling一样处理响应数据?

时间:2014-08-01 17:35:18

标签: sql biztalk

对于使用For Xml的SP,将xml作为响应返回,如果此sp由WCF接收位置使用,我们可以将轮询指定为XmlPolling,以使适配器保持响应的xml“按原样”。但是对于一个wcf-sql Solicit-Response Send端口,它似乎没有相同的方法。目前,我能得到的最好结果是让适配器将xml响应视为CDATA。如下所示:

<usp_MySPResponse xmlns="http://schemas.microsoft.com/Sql/2008/05/TypedProcedures/dbo">
<StoredProcedureResultSet0>
    <StoredProcedureResultSet0 xmlns="http://schemas.microsoft.com/Sql/2008/05/ProceduresResultSets/dbo/usp_MySP">
        <UnNamedColumn0><![CDATA[ <!-- The XML content of sp returned goes here -->
 ....

2 个答案:

答案 0 :(得分:1)

假设存储过程使用FOR XML子句,则必须设置两个绑定属性才能将结果识别为Xml:

  • XmlStoredProcedureRootNodeName
  • XmlStoredProcedureRootNodeNamespace

这两个属性告诉适配器它是FOR XML存储过程。这些与旧版SQL Adapter基本相同。

详细信息:http://msdn.microsoft.com/en-us/library/dd787898.aspx

没有办法绕过这个,所以你的BizTalk架构必须匹配这些值。

答案 1 :(得分:0)

仔细阅读链接https://docs.microsoft.com/en-us/biztalk/adapters-and-accelerators/adapter-sql/execute-stored-procedures-having-a-for-xml-clause-in-sql-server-using-biztalk ,它表示必须从&#34;过程&#34;中生成请求模式,不可否认不是&#34; TypedProcedures&#34; 。因此,请求消息将位于未明确提及的名称空间http://schemas.microsoft.com/Sql/2008/05/Procedures/dbohttps://docs.microsoft.com/en-us/biztalk/adapters-and-accelerators/adapter-sql/message-schemas-for-procedures-and-functions但是在那里指定了&#34;对于xml&#34; -typed过程的操作。

总结一下:请求消息是:

<YOURSPNAME xmlns="http://schemas.microsoft.com/Sql/2008/05/Procedures/dbo" />

并且端口配置操作标头是

<BtsActionMapping xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <Operation Name="YOURSPNAME" Action="XmlProcedure/dbo/YOURSPNAME" />
</BtsActionMapping>

请注意请求消息的命名空间与操作操作之间的差异,只有操作具有&#34; Xml&#34;在里面。并且不要忘记指定(FOR XML)绑定参数,如Johns-305所述。