用于发送本机 XML Web 服务请求的示例应用程序

以下工作示例用以说明如何发送 SOAP 请求以及如何处理响应。这些示例包括 Visual Studio 2005 客户端(C# 和 Visual Basic)。

初始安装

所有示例应用程序都需要执行一般安装。此安装包括下列步骤:

  1. 创建示例存储过程。
  2. 创建用户定义函数。
  3. 创建 HTTP SOAP 端点。
ms189955.note(zh-cn,SQL.90).gif注意:
若要在 AdventureWorks 示例数据库中创建这些对象,可以使用 SQL Server Management Studio 或 osql 命令实用工具。若要安装 AdventureWorks 示例数据库,请参阅运行安装程序安装 AdventureWorks 示例数据库和示例

创建存储过程 (GetCustomerInfo)

以下存储过程旨在说明客户端应用程序如何处理输入参数和输出参数、返回代码、查询结果以及失败时发生的错误。

USE AdventureWorks
GO
DROP PROCEDURE GetCustomerInfo
GO
CREATE PROCEDURE GetCustomerInfo
                    @CustomerID nchar(5),
                    @OutputParam nchar(5) OUTPUT 
AS  

  SELECT @OutputParam = '99999'  
  -- The following INSERT should fail, and an-error returned 
  -- to the client.
  INSERT Store (CustomerID) VALUES (1)

 -- Execute a SELECT statement.
 SELECT top 3 SalesOrderID, OrderDate 
 FROM   Sales.SalesOrderHeader
 WHERE  CustomerID = @CustomerID

 -- Execute SELECT returning XML.
  SELECT CustomerID, SalesOrderID, OrderDate 
  FROM   Sales.SalesOrderHeader
  WHERE  CustomerID = @CustomerID
  for xml auto, XMLSCHEMA

  PRINT 'Hello World'
RETURN 0
Go

此存储过程有两个参数:一个输入参数 (CustomerID) 和一个输出参数 (OutParam),以说明如何传递参数。

存储过程执行下列语句:

  • 有意失败的 INSERT 语句,失败时返回一个错误。该错误旨在说明如何在 SOAP 响应中返回错误。在 Visual Studio 2005 中,错误作为 SqlMessage 对象返回。
  • SELECT 语句。在 Visual Studio 2005 中,结果行集作为 DataSet 对象返回。
  • 返回 XML 数据的 SELECT FOR XML 查询。在 Visual Studio 2005 中,结果行集作为 SqlXml 对象返回。
  • PRINT 语句。在 Visual Studio 2005 中,该语句的结果作为 SqlMessage 对象返回。

创建用户定义函数 (UDFREturningAScalar)

此函数返回一个整数值。

USE AdventureWorks
GO
CREATE FUNCTION UDFReturningAScalar() 
RETURNS int
AS
BEGIN
   RETURN 555
END
Go

创建 HTTP SOAP 端点 (sql_endpoint)

此端点将存储过程和用户定义函数作为 Web 方法公开。另外,还将该端点配置为允许即席查询。客户端应用程序可以向端点发送即席查询的 SOAP 请求。

注意,当为端点保留 HTTP 命名空间 (sp_reserve_http_namespace) 以及完成 SITE 参数时,必须提供服务器名称作为 hostname 的值。另外,port 的值必须与 SQL Server 实例所使用的 HTTP 端口相对应,例如 80 或其他 TCP 端口号(如果它适用)。

USE AdventureWorks
GO
DROP ENDPOINT sql_endpoint
GO
EXEC sp_reserve_http_namespace N'http://hostname:port/sql' 
-- EXEC sp_reserve_http_namespace N'https://www.microsoft.com:80/sql' for example
GO
CREATE ENDPOINT sql_endpoint 
   STATE = STARTED
AS HTTP(
   PATH = '/sql', 
   AUTHENTICATION = (INTEGRATED ), 
   PORTS = ( CLEAR ),
   SITE = 'server'
)
FOR SOAP (
   WEBMETHOD 'http://tempUri.org/'.'GetCustomerInfo' 
            (name='AdventureWorks.dbo.GetCustomerInfo', 
             schema=STANDARD ),
   WEBMETHOD 'UDFReturningAScalar' 
            (name='AdventureWorks.dbo.UDFReturningAScalar'),
   BATCHES = ENABLED,
   WSDL = DEFAULT,
   DATABASE = 'AdventureWorks',
   NAMESPACE = 'http://Adventure-Works/Customers'
)
GO
USE master
EXEC sp_grantlogin @loginame='domain\userOrGroup'
EXEC sp_grantdbaccess @loginame='domain\userOrGroup'
GRANT CONNECT ON ENDPOINT::sql_endpoint TO [domain\userOrGroup]
GO

在前面的代码中,注意以下事项:

  • 创建此端点时定义了两个 Web 方法。
  • WSDL 值设置为 DEFAULT。因此,客户端可以向服务器请求 WSDL 响应。
  • BATCHES 值设置为 ENABLED。因此,客户端可以向此端点发送即席查询请求。
  • Web 方法 UDFReturningAScalar 不指定可选的命名空间。它使用 NAMESPACE 值中指定的命名空间。
  • 创建为 SQL Server 登录帐户的 domain\userOrGroup 值应设置为要求对 HTTP 端点具有访问权限的实际域用户或组。

请参阅

参考

在客户端应用程序中添加 SOAP 标头
向客户端应用程序中添加 SOAP 跟踪支持
设置服务器以侦听本机 XML Web 服务请求
SOAP 请求和响应消息结构
本机 XML Web 服务的指导原则和限制

概念

处理 xml 数据类型和 CLR 用户定义类型

其他资源

编写客户端应用程序

帮助和信息

获取 SQL Server 2005 帮助