使用 Visual Studio 2005 客户端发送 SOAP 请求 (Visual Basic)

后续版本的 Microsoft SQL Server 将删除该功能。 请避免在新的开发工作中使用该功能,并着手修改当前还在使用该功能的应用程序。

本主题中的示例与使用 Visual Studio 2005 客户端发送 SOAP 请求 (C#) 中提供的示例类似。唯一的不同是本主题中的示例使用 Visual Basic 编写。因此,本主题中只提供创建此示例所需的代码和步骤。

创建工作示例

由于创建此示例需要许多步骤,因此将此应用程序分为四个部分:

  • 第一部分:执行存储过程。

  • 第二部分:执行无参数的 SQL 查询。

  • 第三部分:执行有参数的 SQL 查询。

  • 第四部分:执行用户定义函数。

每部分都提供一组说明。在每部分的末尾,可以测试应用程序。

创建所需的代理类

  1. 在计算机上为此应用程序创建一个文件夹。

  2. 在客户端计算机上,从 Microsoft Visual Studio 2005 程序组启动 Microsoft Visual Studio 2005。

  3. 单击**“新建项目”**。

  4. 选择**“Visual Basic 项目”作为“项目类型”**。

  5. 在**“名称”**文本框中,指定 NativeSOAPApp2

  6. 在**“位置”**文本框中,指定要保存此项目的文件夹路径。

  7. 选择**“Windows 应用程序”作为模板**,然后单击**“确定”**。

  8. 在“解决方案资源管理器”窗口中,右键单击**“引用”,然后选择“添加 Web 引用”。添加 Web 引用的另一种方法是从“项目”菜单选择“添加 Web 引用”**。

  9. 在**“地址”框中,键入 http://服务器/sql?wsdl(其中服务器是指服务器的名称),再按 Enter 键。如果成功生成 WSDL,您将看到端点说明。在此点,单击“添加引用”**。这将创建所需的代理类,以便调用 WSDL 文档中的方法。

第一部分:执行存储过程

在此部分中,应用程序请求 GetCustomerInfo Web 方法。

  1. 在 Form1 中,添加一个文本框 (textBox1)、一个按钮 (button1) 和一个列表框 (listBox1)。

  2. 右键单击此文本框,然后选择**“属性”**。将 Text 值从 textBox1 更改为 1。这是默认的 Customer ID 值。

  3. 右键单击 button1,再选择**“属性”**。

    1. Text 属性值从 button1 更改为 ExecSP。

    2. 将 (name) 属性值更改为 ExecSP。

  4. 右键单击列表框 (listBox1),再选择**“属性”**。将 HorizontalScrollbar 属性值更改为 True

  5. 双击 ExecSP

  6. ExecSP 的 Visual Basic 代码列表中的代码复制到此函数。

  7. 更新代码。用使用 CREATE ENDPOINT 创建端点时所标识的主机名更改对 server 的引用。

  8. 保存并编译项目。有关详细信息,请参阅前面的“编译代码”一节。

第二部分:执行无参数的 SQL 查询

在此部分中,客户端应用程序执行一个临时查询(FOR XML 查询)从 AdventureWorks 数据库的“雇员”表中检索三名雇员。

  1. 在 Form1 的**“[设计]”**选项卡上,添加另一个按钮 (button1)。

  2. 右键单击此新按钮,再选择**“属性”**。

    1. Text 属性值从 button1 更改为 ExecBatchFindAllEmps。

    2. 将 (name) 属性值更改为 ExecBatchFindAllEmps。

  3. 双击 ExecBatchFindAllEmp

  4. FindAllEmps 的 Visual Basic 代码列表中的代码复制到此函数。

  5. 更新代码。用使用 CREATE ENDPOINT 创建端点时所标识的主机名更改对 server 的引用。

  6. 保存并编译项目。有关详细信息,请参阅前面的“编译代码”一节。

第三部分:执行有参数的 SQL 查询

除了即席查询的 SOAP 请求包含查询参数之外,此部分与上一部分类似。FOR XML 查询可检索指定雇员 ID 的雇员信息。

  1. 在 Form1 的**“[设计]”**选项卡中,添加一个按钮 (button1)。

  2. 右键单击此新按钮,再选择**“属性”**。

    1. Text 属性值从 button1 更改为 ExecBatchFindAnEmp。

    2. name 属性值更改为 ExecBatchFindAnEmp。。

  3. 双击 ExecBatchFindAnEmp

  4. FindAnEmp 的 Visual Basic 代码列表中的代码复制到此函数。

  5. 更新代码。用使用 CREATE ENDPOINT 创建端点时所标识的主机名更改对 server 的引用。

  6. 保存并编译项目。有关详细信息,请参阅前面的“编译代码”一节。

第四部分:执行用户定义函数

在此部分中,客户端应用程序会发送 SOAP 请求调用 UDFReturningScalar Web 方法。此 Web 方法对应于返回整数值的用户定义函数。

  1. 在 Form1 的**“[设计]”**选项卡中,添加另一个按钮 (button1)。

  2. 右键单击此新按钮,再选择**“属性”**。

    1. Text 属性值从 button1 更改为 ExecUDFReturningScalar,

    2. name 属性值更改为 ExecUDFReturningScalar。

  3. 双击 ExecUDFReturningScalar

  4. ExecUDF 的 Visual Basic 代码列表中的代码复制到此函数。

  5. 更新代码。用使用 CREATE ENDPOINT 创建端点时所标识的主机名更改对 server 的引用。

  6. 保存并编译项目。有关详细信息,请参阅前面的“编译代码”一节。

由于端点指定集成身份验证,因此代码中将显示以下行:proxy.Credentials = System.Net.CredentialCache.DefaultCredentials。

如果使用 SQL Server 身份验证,建议删除此行并用具有以下功能的代码替换:将 WS-Security 标头实现为提供的基于 SQL Server 的身份验证凭据。有关详细信息,请参阅 通过 SOAP 的 SQL Server 身份验证

注意注意

如果正在使用 SQL Server 身份验证或基本身份验证,则 SQL Server 要求您使用安全套接字层 (SSL) 对用户凭据进行安全加密传输,否则会以可见的明文形式传输。有关使 SSL 能与 HTTP 端点一起使用的详细信息,请参阅配置 SSL 使用的证书

编译代码

SQL Server 在其安装过程中将安装 .NET Framework 2.0。这些编译指令使用最新的 .NET Framework(这是 \WINDOWS\Microsoft.NET\Framework 文件夹中的最高版本号)。

编译代码

  • 保存整个项目。
  1. 打开命令提示符,找到保存项目的文件夹。

  2. 从此文件夹中,复制 Web Reference\Server 子文件夹中的 Reference.vb 文件(例如,复制“Web Reference\Server\Reference.vb”)。Form1.vb 和 Reference.vb 文件应在同一文件夹中。

  3. 编译代码,并指定可执行 (.exe) 文件的名称。例如,如果可执行文件的名称为 NativeSOAPApp2.exe,则命令行如下:

    \WINDOWS\Microsoft.NET\Framework\v2.0.xxxxx\vbc.exe /out:NativeSOAPApp2.exe /r:System.dll /r:System.Data.dll /r:System.Xml.dll /r:System.Web.Services.dll /r:Microsoft.VisualBasic.dll /r:System.Drawing.dll /r:System.Windows.Forms.dll /m:Form1 Form1.vb Reference.vb

    xxxxx 是与 .NET Framework 的版本对应的文件夹编号。

    这将在当前目录中创建可执行文件 NativeSOAPApp2.exe。

    注意注意

    如果使用早期版本的 .NET Framework,则可能会出现运行时错误。如果出现此错误,请尝试在 SELECT 语句的结尾处添加 FOR XML AUTO 子句以更新 GetCustomerInfo 存储过程,如下所示:

    SELECT TOP 3 SalesOrderID, OrderDate 
    FROM   SalesOrderHeader
    WHERE  CustomerID = @CustomerID
    FOR XML AUTO
    

该存储过程的执行结果将显示在列表框中。