共用方式為


將 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 專案

  1. 使用 [記事本],複製並貼上<SQL SOAP 追蹤範例類別程式庫的 C# 程式碼列表>的內容,在包含 SOAP 用戶端專案檔案的相同資料夾中,將此內容另存成名為 "SqlSoapTracer.cs" 的檔案。

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

  3. 按一下 [開啟專案]

  4. 瀏覽和選取 SOAP 用戶端專案 (.csproj) 檔。

  5. 在 [方案總管] 視窗中,執行下列步驟:

    1. 依名稱選取專案,按一下滑鼠右鍵,再指向 [加入],然後選取 [加入現有項目]

    2. [加入現有項目] 對話方塊中,從步驟 1 中的儲存位置,瀏覽和選取 SqlSoapTracer.cs 檔案。

    3. 選取 [顯示所有檔案],展開 [Web 參考] 節點,並選取 Reference.cs 檔案。

  6. 在 [程式碼編輯器] 視窗中,在 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]));
            }
    
  7. 若要在用戶端程式碼中執行 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 追蹤支援延伸模組,您必須完成下列步驟:

  1. 使用 SQL Server Management Studio 或 osql 命令公用程式,加入 Web 方法,以公開要在結束點上測試的預存程序或使用者自訂函數。

    如需詳細資訊,請參閱<在 Web 上公開 SQL 可程式性>。

  2. 在 Visual Studio 中,對 SOAP 用戶端應用程式專案進行編碼、偵錯和建置 (如果尚未執行)。

    另外,您也可以使用<使用 Visual Studio 2005 用戶端 (C#) 傳送 SOAP 要求>中所提供的範例專案。

  3. 如上節所述,將 SqlSoapTracer.cs 類別加入至專案。

  4. 在 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 輸出。