如何使用 BizTalk Adapter Pack 2.0 调用具有 FOR XML 子句的存储过程,如果存储过程不在默认架构中?





5.00/5 (2投票s)
如何使用 BizTalk Adapter Pack 2.0 调用具有 FOR XML 子句的存储过程,如果存储过程不在默认架构中?
引言
我在使用 WCF 适配器时准备了这份文档。我认为,如果存储过程不在默认架构中,这将有助于使用 BizTalk Adapter Pack 2.0 调用具有 FOR XML
子句的存储过程。
创建存储过程
如下所示创建用于获取员工详细信息的存储过程。表和 SP 位于 [bt]
架构下。
CREATE PROCEDURE [bt].[Get_EmployeeDetails]
AS
BEGIN
SET NOCOUNT ON;
SELECT Emp_Id,Emp_Name,Designation,[Address] FROM bt.Tbl_Employee
FOR XML AUTO,XMLSCHEMA
END
创建 BizTalk 项目
为存储过程的请求消息生成架构
使用基于 WCF 的 SQL 适配器为具有 FOR XML
子句的存储过程生成请求消息的架构。这将提供适配器发送到 SQL Server 以调用存储过程的请求消息的架构。以下是创建架构的步骤。
为存储过程的响应消息生成架构
为具有 FOR XML
子句的存储过程生成响应消息的架构。执行存储过程以获取响应消息的架构。为此,请在 SQL Management Studio 中执行 SP,并获取架构结构(包含 <xsd:schema>
标签的内容),然后保存为扩展名为“xsd”的文件。
在 Visual Studio 中打开架构并进行以下更改
- 向架构添加一个节点,并将现有根节点移动到这个新添加的节点下。为根节点命名。对于此主题,将根节点重命名为 **Root**。
- 为存储过程生成的架构引用了一个 sqltypes.xsd。您可以从 http://go.microsoft.com/fwlink/?LinkId=131087 获取 sqltypes.xsd 架构。将 sqltypes.xsd 架构添加到 BizTalk 项目。
在为存储过程生成的架构中,将 import schemaLocation
的值更改为以下内容
import schemaLocation="sqltypes.xsd"
为架构提供目标命名空间
单击 <Schema> 节点,然后在“属性”窗格中,在 **Target Namespace** 属性中指定一个命名空间。根据您的项目赋予命名空间:http://ForXmlStoredProcs/namespace。
更改属性
单击 <Schema> 节点,然后在“属性”窗格中,将 **"Element FromDefault"** 属性从 **"Qualified"** 更改为 **"(Default)"**。
以前
操作后
更改架构属性
单击从 SP 创建的根节点,然后将“Min Occurs”和“Max Occurs”属性分别更改为“0”和“unbounded”,如下所示。
9. 定义消息和消息类型
您之前生成的架构描述了编排中消息所需的“类型”。消息通常是一个变量,其类型由相应的架构定义。您现在必须为编排创建消息,并将它们链接到上一步生成的架构。
创建消息并链接到架构
- 将编排添加到 BizTalk 项目。在“解决方案资源管理器”中,右键单击 BizTalk 项目名称,指向 **“添加”**,然后单击 **“新建项”**。为 BizTalk 编排键入名称,然后单击 **“添加”**。
- 打开 BizTalk 项目的“编排视图”窗口(如果尚未打开)。为此,请单击 **“视图”**,指向 **“其他窗口”**,然后单击 **“编排视图”**。
- 在“编排视图”中,右键单击 **“消息”**,然后单击 **“新建消息”**。
- 属性窗口。
- 在 **Message_1** 的 **“属性”** 窗格中,执行以下操作:选择适配器服务生成的架构作为此消息的消息类型。
- 创建另一条新消息。在新消息的 **“属性”** 窗格中,执行以下操作:选择从存储过程生成的架构作为此消息的消息类型。
设置编排
您必须创建一个 BizTalk 编排,以便使用 BizTalk Server 执行 SQL Server 中的存储过程。在此编排中,您将请求消息放入定义的接收位置。SQL 适配器将消耗此消息并将其传递给 SQL Server。SQL Server 的响应将保存到另一个位置。您必须包含发送和接收形状,分别用于将消息发送到 SQL Server 和接收响应。用于调用过程的示例编排如下所示
- 添加消息形状
- 将 **Name** 设置为
ReceiveMessage
- 将 **Activate** 设置为
True
- 将 **Name** 设置为
ReceiveResponse
- 将 **Activate** 设置为
False
- 添加端口
- 将 **Identifier** 设置为
MessageIn
- 将 **Type** 设置为
MessageInType
- 将 **Communication Pattern** 设置为
One-Way
- 将 **Communication Direction** 设置为
Receive
- 将 **Identifier** 设置为
LOBPort
- 将 **Type** 设置为
LOBPortType
- 将 **Communication Pattern** 设置为
Request-Response
- 将 **Communication Direction** 设置为
Send-Receive
- 将 **Identifier** 设置为
ResponseOut
- 将 **Type** 设置为
ResponseOutType
- 将 **Communication Pattern** 设置为
One-Way
- 将 **Communication Direction** 设置为
Send
- 为操作形状指定消息,并将它们连接到端口
- 将 **Message** 设置为
Request
- 将 **Operation** 设置为
MessageIn.FOR_XML.Request
- 将 **Message** 设置为
Request
- 将 **Operation** 设置为
LOBPort.FOR_XML.Request
- 将 **Message** 设置为
Response
- 将 **Operation** 设置为
LOBPort.FOR_XML.Response
- 将 **Message** 设置为
Response
- 将 **Operation** 设置为
ResponseOut.FOR_XML.Request
请确保为每个消息形状指定以下属性。在“形状”列中列出的名称是上面提到的编排中显示的消息形状的名称。
形状 | 形状类型 | 属性 |
ReceiveMessage |
Receive |
|
SendMessage |
发送 |
将 Name 设置为 SendMessage |
ReceiveResponse |
Receive |
|
SendResponse |
发送 |
将 **Name** 设置为 SendResponse |
请确保为每个逻辑端口指定以下属性。在“端口”列中列出的名称是编排中显示的端口的名称。
端口 | 属性 |
MessageIn |
|
LOBPort |
|
ResponseOut |
|
下表指定了您应该为指定操作形状的消息设置的属性及其值,并将消息链接到端口。在“形状”列中列出的名称是前面提到的编排中显示的消息形状的名称。
形状 | 属性 |
ReceiveMessage |
|
SendMessage |
|
ReceiveResponse |
|
SendResponse |
|
指定这些属性后,消息形状和端口将连接,您的编排即完成。
配置 BizTalk 应用程序
部署 BizTalk 项目后,您之前创建的编排将在 BizTalk Server 管理控制台的“编排”窗格下列出。您必须使用 BizTalk Server 管理控制台来配置应用程序。
配置应用程序包括
- 为应用程序选择主机。
- 将您在编排中创建的端口映射到 BizTalk Server 管理控制台中的物理端口。对于此编排,您必须
- 定义硬盘上的一个位置和一个相应的文件端口,您将在其中放置请求消息。BizTalk 编排将消耗请求消息并将其发送到 SQL Server 数据库。
- 定义硬盘上的一个位置和一个相应的文件端口,BizTalk 编排将在此处放置包含来自 SQL Server 数据库的响应的响应消息。
- 定义物理 WCF-Custom 或 WCF-SQL 发送端口以将消息发送到 SQL Server 数据库。要创建 SQL 发送和接收端口,我们可以使用在适配器生成存储过程架构时生成的绑定文件。
- 您还必须在发送端口中指定 Action。对于包含
FOR XML
子句的过程,您必须按照以下格式设置 Action
XmlProcedure/<schema_name>/<procedure_name>
此处您需要指定要执行的存储过程,“InoboudOperationType
”应为“XmlPolling
”。
输入触发器消息将如下所示