使用 Visual Studio 2005 客户端发送 SOAP 请求 (C#)
本主题介绍了一个示例应用程序,其中 Visual Studio 2005 客户端向 SQL Server 2005 实例发送 SOAP 请求,并处理 SOAP 响应。这些请求是为用于发送本机 XML Web 服务请求的示例应用程序中创建的端点方法而发送的。
若要使用此应用程序,建议您先熟悉一下设置服务器以侦听本机 XML Web 服务请求和编写客户端应用程序中提供的概念和步骤信息。
注意: |
---|
此示例应用程序需要进行一些初始设置。在继续示例应用程序之前,请按照用于发送本机 XML Web 服务请求的示例应用程序中说明的步骤进行操作。 |
发送 SOAP 请求
在此应用程序中,需要创建一个包含按钮和文本框的窗体,用来向端点发送 SOAP 请求。
发送对 GetCustomerInfo 存储过程的 SOAP 请求后,将作为输入参数传入文本框中提供的客户 ID 值。如果在文本框中未指定任何值,则将假定一个空字符串,并返回其 CustomerID 值为空字符串的客户。如果输入了 NULL(空),则将返回 CustomerID 值为 NULL 的客户。注意,这种情况发生时,xsi:nil = 'true' 属性将自动添加到 SOAP 请求中以指明 NULL 参数值。
GetCustomerInfo 存储过程旨在显示如何处理输入参数、输出参数、错误消息和结果。应用程序也会为用户定义函数发送 SOAP 请求。另外,它还为下列特殊查询发送 SOAP 请求:
- 检索所有雇员的 SELECT 查询。
- 检索其 ID 作为输入的雇员的 SELECT 查询。
处理 SOAP 响应
当以一个对象数组的形式返回 SOAP 请求的结果时,客户端应用程序将标识数组中每个对象的类型,然后相应处理对象。然后,应用程序将显示有关每个对象数组元素的下列信息:
- 数组元素中值的数据类型。
- 值:结果集、返回代码和输出参数值等。
创建工作示例
因为创建此示例时必须执行许多步骤,所以将应用程序分为下列五个部分:
- 第一部分:执行 GetCustomerInfo 存储过程
- 第二部分:执行 SP
- 第三部分:执行无参数的 SQL 查询
- 第四部分:执行有参数的 SQL 查询
- 第五部分:执行用户定义函数
每部分都提供一组说明。在每部分的末尾,可以测试应用程序。
第一部分:执行 GetCustomerInfo 存储过程
- 在客户机上,从 Microsoft Visual Studio 2005 程序组启动 Microsoft Visual Studio 2005。
- 单击**“新建项目”**。
- 将**“Visual C# 项目”选择为“项目类型”**。
- 将 NativeSOAPApp1 指定为项目名
- 指定想要保存项目的位置。
- 选择**“Windows 应用程序”作为模板,然后单击“确定”**。
- 在“解决方案资源管理器”窗口中,右键单击**“引用”,然后选择“添加 Web 引用”。添加 Web 引用的另一种方法是从“项目”菜单中选择“添加 Web 引用”**。
- 在**“地址”**框中,键入 https://Server/sql?wsdl,然后按 Enter 键。注意,必须在 URL 中输入服务器名。
- 单击**“添加引用”**。这将创建所需的代理类,以便调用 WSDL 文档中的方法。
第二部分:执行 SP
- 在“视图”菜单上,单击**“工具箱”**以在“Form1.cs [设计]”窗格中打开工具箱。另外,还可以按 CTRL + ALT + X 打开工具箱。
- 在 Form1 中,添加一个文本框 (textBox1)、一个按钮 (button1) 和一个列表框 (listBox1)。
- 右键单击文本框,然后选择**“属性”**。将 Text 值从 textBox1 更改为 1。这是默认的 Customer ID 值。
- 右键单击 button1,再选择**“属性”**。
- 将 Text 属性值从 button1 更改为 ExecSP。
- 将 (name) 属性值更改为 ExecSP。
- 右键单击列表框 (listBox1),再选择**“属性”**。将 HorizontalScrollbar 属性值更改为 True。
- 双击 ExecSP。
- 将代码从为 ExecSP 列出的 C# 代码(本机 SOAP 支持)复制到此函数。
- 更新代码。用使用 CREATE ENDPOINT 创建端点时所标识的主机名更改对
server
的引用。 - 保存并编译项目。有关详细信息,请参阅前面的“编写代码”一节。
第三部分:不使用参数执行 SQL 查询
本部分的客户端应用程序执行一个特殊查询(FOR XML 查询),该查询会从 AdventureWorks 数据库的 Employee 表中检索雇员。
- 在 Form1的 **“[设计]”**选项卡上,添加另一个按钮 (button1)。
- 右键单击此新按钮,再选择**“属性”**。
- 将 Text 属性值从 button1 更改为 BatchQueryFindAllEmps。
- 将(name)属性值更改为 BatchQueryFindAllEmps。
- 双击 BatchQueryFindAllEmps。
- 将代码从为 BatchQueryFindAllEmps 列出的 C# 代码(本机 SOAP 支持)复制到此函数。
- 更新代码。用使用 CREATE ENDPOINT 创建端点时所标识的主机名更改对
server
的引用。 - 保存并编译项目。有关详细信息,请参阅前面的“编写代码”一节。
第四部分:使用参数执行 SQL 查询
除了即席查询的 SOAP 请求包含查询参数之外,此部分与上一部分类似。FOR XML 查询可检索指定雇员 ID 的雇员信息。
- 在 Form1 的**“[设计]”**选项卡上,添加一个按钮 (button1)。
- 右键单击此新按钮,再选择**“属性”**。
- 将 Text 属性值从 button1 更改为 BatchQueryFindAnEmp。
- 将**“(名称)”**属性值更改为 BatchQueryFindAnEmp。
- 双击 BatchQueryFindAnEmp。
- 将代码从为 BatchQueryFindAnEmp 列出的 C# 代码(本机 SOAP 支持)复制到此函数。
- 更新代码。用使用 CREATE ENDPOINT 创建端点时所标识的主机名更改对
server
的引用。 - 保存并编译项目。有关详细信息,请参阅前面的“编写代码”一节。
第五部分:执行用户定义函数
在此部分中,客户端应用程序会发送 SOAP 请求调用 UDFReturningScalar Web 方法。此 Web 方法对应于返回整数值的用户定义函数。
- 在 Form1 的**“[设计]”**选项卡上,添加一个按钮 (button1)。
- 右键单击此新按钮,再选择**“属性”**。
- 将 Text 属性值从 button1 更改为 ExecUDFReturningScalar。
- 将**“(名称)”**属性值更改为 ExecUDFReturningScalar。
- 双击 ExecUDFReturningScalar。
- 将为 ExecUDFReturningScalar 列出的 C# 代码(本机 SOAP 支持)中的代码添加到此函数。
- 更新代码。用使用 CREATE ENDPOINT 创建端点时所标识的主机名更改对
server
的引用。 - 保存并编译项目。有关详细信息,请参阅前面的“编写代码”一节。
- 单击 ExecUDFReturningScalar。用户定义函数中的返回值将显示在列表框中。
由于端点指定集成身份验证,因此代码中将显示以下行:proxy.Credentials = System.Net.CredentialCache.DefaultCredentials;
如果使用 SQL Server 身份验证,我们建议删除此行并用实现 WS-Security 标头的代码替换它,以提供基于 SQL Server 的身份验证凭据。有关详细信息,请参阅 通过 SOAP 的 SQL Server 身份验证。
注意: |
---|
如果使用的是 SQL Server 身份验证或基本身份验证,则 SQL Server 2005 会要求您使用安全套接字层 (SSL) 对用户凭据进行安全加密传输,否则会以可见的明文形式传输。有关使 SSL 能与 HTTP 端点一起使用的详细信息,请参阅配置 SSL 使用的证书。 |
编译代码
在 SQL Server 2005 的安装过程中会安装 Microsoft .NET Framework 2.0。这些编写指令使用最新的 .NET Framework。(这是 \WINDOWS\Microsoft.NET\Framework 文件夹中的最大编号)。
编写示例代码
- 保存整个项目。
- 打开命令提示,找到保存项目的文件夹。
- 在此文件夹中,从 Web Reference\Server 子文件夹中复制文件 Reference.cs。(例如,复制“Web Reference\Server\Reference.cs”。)Form1.cs 文件和 Reference.cs 文件应该在同一文件夹中。
- 编译代码,并指定可执行 (.exe) 文件的名称。例如,如果可执行文件的名称为 NativeSOAPApp1.exe,则命令行将显示为:
\WINDOWS\Microsoft.NET\Framework\v2.0.xxxxx\csc.exe /out:NativeSOAPApp1.exe Form1.cs Reference.cs
xxxxx 是与 .NET Framework 版本对应的文件夹编号。
这样就在当前目录中创建了可执行文件 (NativeSOAPApp1.exe)。
注意: |
---|
如果使用的是 .NET Framework 的早期版本,则可能会接收到运行时错误。如果出现此错误,请尝试在 SELECT 语句的结尾处添加 FOR XML AUTO 子句以更新 GetCustomerInfo 存储过程,如下所示: |
SELECT TOP 3 SalesOrderID, OrderDate
FROM SalesOrderHeader
WHERE CustomerID = @CustomerID
FOR XML AUTO
该存储过程的执行结果将显示在列表框中。
请参阅
参考
设置服务器以侦听本机 XML Web 服务请求
SOAP 请求和响应消息结构
用于发送本机 XML Web 服务请求的示例应用程序
本机 XML Web 服务的指导原则和限制