Share via


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

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

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

ms180802.note(zh-tw,SQL.90).gif附註:
這個範例應用程式需要一些初始設定。在開始使用範例應用程式之前,請遵循<傳送原生 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] 程式群組,啟動 Microsoft 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# 程式碼清單 (原生 SOAP 支援)>中的程式碼複製到這個函數。
  8. 更新程式碼。變更對 server 的參考,成為以 CREATE ENDPOINT 建立端點時所識別的主機名稱。
  9. 儲存並編譯專案。如需詳細資訊,請參閱前面的段落「編譯程式碼」。

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

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

  1. 在 Form1 的 [設計] 索引標籤中,加入另一個按鈕 (button1)。
  2. 以滑鼠右鍵按一下這個新按鈕,然後選取 [屬性]
    1. Text 屬性值從 button1 變更為 BatchQueryFindAllEmps
    2. 將 (name) 屬性值變更為 BatchQueryFindAllEmps
  3. 連按兩下 [BatchQueryFindAllEmps]
  4. 將<BatchQueryFindAllEmps 的 C# 程式碼清單 (原生 SOAP 支援)>中的程式碼複製到這個函數。
  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# 程式碼清單 (原生 SOAP 支援)>中的程式碼複製到這個函數。
  5. 更新程式碼。變更對 server 的參考,成為以 CREATE ENDPOINT 建立端點時所識別的主機名稱。
  6. 儲存並編譯專案。如需詳細資訊,請參閱前面的段落「編譯程式碼」。

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

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

  1. 在 Form1 的 [設計] 索引標籤中,加入按鈕 (button1)
  2. 以滑鼠右鍵按一下這個新按鈕,然後選取 [屬性]
    1. Text 屬性值從 button1 變更為 ExecUDFReturningScalar
    2. (name) 屬性值變更為 ExecUDFReturningScalar
  3. 連按兩下 [ExecUDFReturningScalar]
  4. 將<ExecUDFReturningScalar 的 C# 程式碼清單 (原生 SOAP 支援)>中的程式碼新增至這個函數。
  5. 更新程式碼。變更對 server 的參考,成為以 CREATE ENDPOINT 建立端點時所識別的主機名稱。
  6. 儲存並編譯專案。如需詳細資訊,請參閱前面的段落「編譯程式碼」。
  7. 按一下 [ExecUDFReturningScalar]。清單方塊中會顯示使用者自訂函數的傳回值。

因為端點指定「整合式驗證」,所以程式碼中會出現下列一行文字:proxy.Credentials = System.Net.CredentialCache.DefaultCredentials;

如果您使用 SQL Server 驗證,建議您移除這行文字,取代成實作 WS-Security 標頭的程式碼,以提供以 SQL Server 為基礎的驗證認證。如需詳細資訊,請參閱<透過 SOAP 的 SQL Server 驗證>。

ms180802.note(zh-tw,SQL.90).gif附註:
如果您使用 SQL Server 驗證或基本驗證,SQL Server 2005 會要求您使用安全通訊端層 (SSL),以安全加密方式傳輸使用者認證 (否則為可見的純文字)。如需有關如何允許 SSL 搭配 HTTP 端點使用的詳細資訊,請參閱<設定 SSL 使用的憑證>。

編譯程式碼

SQL Server 2005 在安裝過程中會安裝 Microsoft .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)。
ms180802.note(zh-tw,SQL.90).gif附註:
如果您使用舊版的 .NET Framework,則會收到執行階段錯誤。如果發生錯誤,請嘗試將 FOR XML AUTO 子句加入至 SELECT 陳述式結尾,更新 GetCustomerInfo 預存程序,如下所示:
SELECT TOP 3 SalesOrderID, OrderDate 
FROM   SalesOrderHeader
WHERE  CustomerID = @CustomerID
FOR XML AUTO

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

請參閱

參考

設定伺服器接聽原生 XML Web Service 的要求
SOAP 要求與回應訊息結構
傳送原生 XML Web Service 要求的範例應用程式
原生 XML Web Service 中的指導方針和限制

概念

使用原生 XML Web Service 的最佳作法

其他資源

撰寫用戶端應用程式

說明及資訊

取得 SQL Server 2005 協助