傳送原生 XML Web Service 要求的範例應用程式

下列提供的範例顯示如何傳送 SOAP 要求和處理回應。這些範例包含以 C# 及 Visual Basic 所設計的 Visual Studio 2005 用戶端。

初始安裝

所有的範例應用程式都需要一般安裝。此安裝包含下列步驟:

  1. 建立範例預存程序。
  2. 建立使用者自訂函數。
  3. 建立 HTTP SOAP 結束點。
ms189955.note(zh-tw,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 Service 的要求
SOAP 要求與回應訊息結構
原生 XML Web Service 中的指導方針和限制

概念

處理 xml 資料類型及 CLR 使用者自訂類型

其他資源

撰寫用戶端應用程式

說明及資訊

取得 SQL Server 2005 協助