將 SOAP 追蹤支援加入用戶端應用程式
未來的 Microsoft SQL Server 版本將移除這項功能。請避免在新的開發工作中使用這項功能,並規劃修改目前使用這項功能的應用程式。
在 SQL Server 中開發原生 XML Web Service 的 Web 用戶端應用程式時,有一個有用的疑難排解工具可用來追蹤和觀察 SQL Server 執行個體和用戶端應用程式之間交換的 SOAP 訊息。
此主題特別討論用來實作 SOAP 延伸模組標頭的範例類別程式庫,它支援從 Visual Studio 2005 對用戶端應用程式專案的 SOAP 追蹤。與專案整合時,這些延伸模組會追蹤和顯示 SOAP 要求和回應訊息的實際內容。
這個程式庫可以加入現有的 Visual Studio 2005 SOAP 用戶端專案中。這包含<傳送原生 HTTP SOAP 要求的範例應用程式>中所提供的範例應用程式。建議您先熟悉<設定伺服器接聽原生 XML Web Service 要求>和<撰寫用戶端應用程式>中所提供的概念和程序資訊。
此外,如果不熟悉 SOAP 訊息的格式,請參閱下列主題:
[!附註]
下列程序假設您已使用 Visual Studio 2005 建立現有的 SOAP 用戶端應用程式,而且已經加入使用 SQL Server 所建立之 HTTP SOAP 端點的 Web 參考,如<使用 Visual Studio 2005 用戶端 (C#) 傳送 SOAP 要求>中所示。
若要將 SOAP 追蹤範例程式庫加入到 Visual Studio 專案
使用 [記事本],複製並貼上<SQL SOAP 追蹤範例類別程式庫的 C# 程式碼列表>的內容,在包含 SOAP 用戶端專案檔案的相同資料夾中,將此內容另存成名為 "SqlSoapTracer.cs" 的檔案。
在用戶端電腦上,從 Microsoft Visual Studio 2005 程式群組,啟動 Microsoft Visual Studio 2005。
按一下 [開啟專案]。
瀏覽和選取 SOAP 用戶端專案 (.csproj) 檔。
在 [方案總管] 視窗中,執行下列步驟:
依名稱選取專案,按一下滑鼠右鍵,再指向 [加入],然後選取 [加入現有項目]。
在 [加入現有項目] 對話方塊中,從步驟 1 中的儲存位置,瀏覽和選取 SqlSoapTracer.cs 檔案。
選取 [顯示所有檔案],展開 [Web 參考] 節點,並選取 Reference.cs 檔案。
在 [程式碼編輯器] 視窗中,在 Reference.cs 檔案中找出 Web 方法的進入點,以更新此檔案。
例如,如果您要將 SOAP 追蹤支援加入至<使用 Visual Studio 2005 用戶端 (C#) 傳送 SOAP 要求>中所提供之範例專案,這個專案所包含之各種 Web 方法的發行 Web 方法進入點如下所示:
public object[] GetCustomerInfo([System.Xml.Serialization.XmlElementAttribute(IsNullable=true)] System.Data.SqlTypes.SqlString CustomerID, [System.Xml.Serialization.XmlElementAttribute(IsNullable=true)] ref System.Data.SqlTypes.SqlString OutputParam) { object[] results = this.Invoke("s2MsgGetCustomerInfoSoapIn", new object[] { CustomerID, OutputParam}); OutputParam = ((System.Data.SqlTypes.SqlString)(results[1])); return ((object[])(results[0])); } ... public System.Data.SqlTypes.SqlInt32 UDFReturningAScalar() { object[] results = this.Invoke("s1MsgUDFReturningAScalarSoapIn", new object[0]); return ((System.Data.SqlTypes.SqlInt32)(results[0])); }
若要在用戶端程式碼中執行 Web 方法時加入 SOAP 追蹤支援,請在 Reference.cs 程式碼中加入以下的 snoopattribute() 呼叫,直接放在所要追蹤之每個 Web 方法的進入點,如以下程式碼行所示。
[snoopattribute()] public object[] GetCustomerInfo(...) {...} ... [snoopattribute()] public System.Data.SqlTypes.SqlInt32 UDFReturningAScalar() {...}
這樣會註冊 SOAP 延伸模組,當這些 Web 方法執行時,用來叫用這些 Web 方法的 SOAP 追蹤。
使用 SOAP 追蹤支援來測試應用程式
在 Visual Studio 開發環境中執行 SOAP 用戶端應用程式時,若要使用以上程式碼所提供的 SOAP 追蹤支援延伸模組,您必須完成下列步驟:
使用 SQL Server Management Studio 或 osql 命令公用程式,加入 Web 方法,以公開要在結束點上測試的預存程序或使用者自訂函數。
如需詳細資訊,請參閱<在 Web 上公開 SQL 可程式性>。
在 Visual Studio 中,對 SOAP 用戶端應用程式專案進行編碼、偵錯和建置 (如果尚未執行)。
另外,您也可以使用<使用 Visual Studio 2005 用戶端 (C#) 傳送 SOAP 要求>中所提供的範例專案。
如上節所述,將 SqlSoapTracer.cs 類別加入至專案。
在 Visual Studio 開發環境中,儲存、建立和執行用戶端應用程式。
藉由執行應用程式,會建立 Windows 剪貼簿檢視器物件。在步驟 3 中已啟用追蹤的 Web 方法執行時,這個檢視器物件會顯示每個 Web 方法的下列資訊:
SOAP 用戶端要求訊息,由用戶端程式碼所產生。
SOAP 伺服器回應訊息,由 SQL Server 原生 XML Web Service 所傳回。
若要在追蹤活動發生之後,檢視剪貼簿的內容,您可以將目前 Windows 剪貼簿內容貼入 [記事本]。
SOAP 追蹤支援的運作方式
此追蹤機制使用 SQL Server 原生 XML Web Service 實作中的預先定義回呼和事件。這些包括兩個事件:BeforeSerialize 和 AfterSerialize。
這些事件和回呼允許設陷 SOAP 要求及對應的 SOAP 回應 (來自伺服器),並重新導向到輸出資料流。在輸入的程式碼中,輸出會重新導向到 System.Windows.Forms.Clipboard 物件。Clipboard 物件會接收並顯示執行直接在 snoopattribute() 呼叫之前的 Web 方法交換的 SOAP 用戶端要求和伺服器回應訊息。
用戶端要求的輸出和 SQL Server 所發出的回應,分別使用SOAP 要求訊息結構和SOAP 回應訊息結構的類似格式。如果 Web 方法執行成功,在回應中也會出現伺服器所產生的所有結果,例如序列化 XML 輸出。在發生錯誤的狀況下,在伺服器所傳回的回應中,會出現 SOAP 錯誤訊息結構,取代序列化 XML 輸出。