对于使用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 -->
....
答案 0 :(得分:1)
假设存储过程使用FOR XML子句,则必须设置两个绑定属性才能将结果识别为Xml:
这两个属性告诉适配器它是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/dbo
中
https://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所述。