共用方式為


使用 Visual Studio 2005 用戶端 (C#) 傳送 SOAP 要求

未來的 Microsoft SQL Server 版本將移除這項功能。請避免在新的開發工作中使用這項功能,並規劃修改目前使用這項功能的應用程式。

此主題描述 Visual Studio 2005 用戶端用來傳送 SOAP 要求至 SQL Server 執行個體並處理 SOAP 回應之範例應用程式。這些要求是針對<傳送原生 XML Web Service 要求的範例應用程式>中所建立的端點方法傳送。

若要使用這個應用程式,建議您先熟悉<設定伺服器接聽原生 XML Web Service 的要求>和<撰寫用戶端應用程式>中提供的概念和程序資訊。

[!附註]

這個範例應用程式需要一些初始設定。在開始使用範例應用程式之前,請遵循<傳送原生 XML Web Service 要求的範例應用程式>中所述的步驟。

傳送 SOAP 要求

在這個應用程式中,您會使用傳送 SOAP 要求至端點所需的按鈕和文字方塊來設定表單。

傳送 GetCustomerInfo 預存程序的 SOAP 要求時,文字方塊中所提供的客戶識別碼值會作為輸入參數傳入。如果文字方塊中未指定任何值,則會假設為空白字串,並傳回 CustomerID 值為空白字串的客戶。如果輸入 NULL (null),則會傳回 CustomerID 為 NULL 的客戶。請注意,發生這個狀況時,xsi:nil = 'true' 屬性會自動加入至 SOAP 要求,表示 NULL 參數值。

GetCustomerInfo 預存程序是用來顯示如何處理輸入、輸出參數、錯誤訊息和結果。應用程式也會傳送使用者自訂函數的 SOAP 要求。此外,還會傳送下列特定查詢的 SOAP 要求:

  • SELECT 查詢,以擷取所有員工。

  • SELECT 查詢,以擷取輸入時提供識別碼的員工。

處理 SOAP 回應

以物件陣列傳回 SOAP 要求的結果時,用戶端應用程式會識別陣列中每個物件的類型,並據此處理物件。接著,應用程式會顯示每個物件陣列元素的下列資訊:

  • 陣列元素中之值的資料類型。

  • 值:結果集、傳回碼、輸出參數值等。

建立工作範例

因為建立這個範例必須依照許多步驟,所以此應用程式分成五個部分:

  • 第 1 部分:執行 GetCustomerInfo 預存程序。

  • 第 2 部分:執行 SP

  • 第 3 部分:執行不含參數的 SQL 查詢

  • 第 4 部分:執行含參數的 SQL 查詢

  • 第 5 部分:執行使用者自訂函數

每個部分各提供一組指示。您可以在各部分結束時,測試應用程式。

第 1 部分:執行 GetCustomerInfo 預存程序

  1. 在用戶端電腦上,從 [Microsoft Visual Studio 2005] 程式群組啟動 Visual Studio 2005。

  2. 按一下 [新增專案]

  3. 選取 [Visual C# 專案] 作為 [專案類型]

  4. 指定 NativeSOAPApp1 作為專案名稱。

  5. 指定要儲存專案的位置。

  6. 選取 [Windows 應用程式] 作為範本,然後按一下 [確定]

  7. 在 [方案總管] 視窗中,以滑鼠右鍵按一下 [參考],然後選取 [加入 Web 參考]。加入 Web 參考的另一個方法是,選取 [專案] 功能表上的 [加入 Web 參考]

  8. [位址] 方塊中,輸入 https://Server/sql?wsdl,然後按 ENTER 鍵。請注意,您必須在 URL 中輸入伺服器名稱。

  9. 按一下 [加入參考]。這會建立必要的 Proxy 類別,讓您呼叫 WSDL 文件中的方法。

第 2 部分:執行 SP

  1. 按一下 [檢視] 功能表上的 [工具箱],在 Form1.cs [設計] 窗格中開啟工具箱。或者,您也可以按 CTRL + ALT + X 開啟工具箱。

  2. 在 Form1 中,加入文字方塊 (textBox1)、按鈕 (button1) 和清單方塊 (listBox1)。

  3. 以滑鼠右鍵按一下文字方塊,然後選取 [屬性]。將 Text 的值從 textBox1 變更為 1。這是預設的客戶識別碼值。

  4. 以滑鼠右鍵按一下 [button1],然後選取 [屬性]

    1. Text 屬性值從 button1 變更為 ExecSP。

    2. 將 (name) 屬性值變更為 ExecSP。

  5. 以滑鼠右鍵按一下文字方塊 (listBox1),然後選取 [屬性]。將 HorizontalScrollbar 屬性值變更為 True

  6. 連按兩下 [ExecSP]

  7. 將<ExecSP 的 C# 程式碼清單>中的程式碼複製到這個函數。

  8. 更新程式碼。根據以 CREATE ENDPOINT 建立端點時所識別的主機名稱,變更 server 的參考。

  9. 儲存並編譯專案。如需詳細資訊,請參閱前面的段落「編譯程式碼」。

第 3 部分:執行不含參數的 SQL 查詢

用戶端應用程式的這個部分會執行特定查詢 (FOR XML 查詢),從 AdventureWorks 資料庫中的 Employee 資料表擷取三個員工。

  1. 在 Form1 的 [設計] 索引標籤中,加入另一個按鈕 (button1)。

  2. 以滑鼠右鍵按一下這個新按鈕,然後選取 [屬性]

    1. Text 屬性值從 button1 變更為 BatchQueryFindAllEmps。

    2. 將 (name) 屬性值變更為 BatchQueryFindAllEmps。

  3. 連按兩下 [BatchQueryFindAllEmps]

  4. 將<BatchQueryFindAllEmps 的 C# 程式碼清單>中的程式碼複製到這個函數。

  5. 更新程式碼。變更對 server 的參考,成為以 CREATE ENDPOINT 建立端點時所識別的主機名稱。

  6. 儲存並編譯專案。如需詳細資訊,請參閱前面的段落「編譯程式碼」。

第 4 部分:執行含參數的 SQL 查詢

這個部分類似上一個部分,除了此特定查詢的 SOAP 要求會包含查詢參數。FOR XML 查詢會擷取指定之員工識別碼的員工資訊。

  1. 在 Form1 的 [設計] 索引標籤中,加入按鈕 (button1)。

  2. 以滑鼠右鍵按一下這個新按鈕,然後選取 [屬性]

    1. Text 屬性值從 button1 變更為 BatchQueryFindAnEmp。

    2. 將 (name) 屬性值變更為 BatchQueryFindAnEmp。

  3. 連按兩下 BatchQueryFindAnEmp

  4. 將<BatchQueryFindAnEmp 的 C# 程式碼清單>中的程式碼複製到這個函數。

  5. 更新程式碼。根據使用 CREATE ENDPOINT 建立端點時所識別的主機名稱,變 server 的參考。

  6. 儲存並編譯專案。如需詳細資訊,請參閱前面的段落「編譯程式碼」。

第 5 部分:執行使用者自訂函數

在這個部分中,用戶端應用程式會傳送 UDFReturningScalar Web 方法的 SOAP 要求。這個 Web 方法對應傳回整數值的使用者自訂函數。

  1. 在 Form1 的 [設計] 索引標籤中,加入按鈕 (button1)

  2. 以滑鼠右鍵按一下這個新按鈕,然後選取 [屬性]

    1. Text 屬性值從 button1 變更為 ExecUDFReturningScalar。

    2. (name) 屬性值變更為 ExecUDFReturningScalar。

  3. 連按兩下 [ExecUDFReturningScalar]

  4. 將<ExecUDFReturningScalar 的 C# 程式碼清單>中的程式碼新增至這個函數。

  5. 更新程式碼。變更對 server 的參考,成為以 CREATE ENDPOINT 建立端點時所識別的主機名稱。

  6. 儲存並編譯專案。如需詳細資訊,請參閱前面的段落「編譯程式碼」。

  7. 按一下 [ExecUDFReturningScalar]。清單方塊中會顯示使用者自訂函數的傳回值。

因為端點指定「整合式驗證」,所以程式碼中會出現下列一行文字: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. 開啟命令提示字元,找出儲存專案所在的資料夾。

  3. 在這個資料夾中,複製 Web Reference\Server 子資料夾的 Reference.cs 檔案 (例如,複製 "Web Reference\Server\Reference.cs")。Form1.cs 和 Reference.cs 檔案應該在相同的資料夾中。

  4. 編譯程式碼並指定可執行檔 (.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,則會收到執行階段錯誤。如果發生錯誤,請嘗試將 FOR XML AUTO 子句加入至 SELECT 陳述式結尾,更新 GetCustomerInfo 預存程序,如下所示:

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

清單方塊中會顯示執行預存程序後的結果。