傳送原生 XML Web Service 要求的範例應用程式
未來的 Microsoft SQL Server 版本將移除這項功能。請避免在新的開發工作中使用這項功能,並規劃修改目前使用這項功能的應用程式。
下列提供的範例顯示如何傳送 SOAP 要求和處理回應。這些範例包含以 C# 及 Visual Basic 所設計的 Visual Studio 2005 用戶端。
初始安裝
所有的範例應用程式都需要一般安裝。此安裝包含下列步驟:
建立範例預存程序。
建立使用者定義函數。
建立 HTTP SOAP 結束點。
[!附註]
若要在 AdventureWorks 範例資料庫中建立這些物件,您可以使用 SQL Server Management Studio 或 osql 命令公用程式。如需有關如何安裝 AdventureWorks 範例資料庫的詳細資訊,請參閱<安裝 SQL Server 範例和範例資料庫的考量>。
建立預存程序 (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 結束點的實際網域使用者或群組。
本節內容