Freigeben über


Hinzufügen der Unterstützung für die SOAP-Ablaufverfolgung zu Clientanwendungen

Diese Funktion wird in zukünftigen Versionen von Microsoft SQL Server nicht mehr bereitgestellt. Verwenden Sie diese Funktion beim Entwickeln neuer Anwendungen nicht, und planen Sie das Ändern von Anwendungen, in denen es zurzeit verwendet wird.

Beim Entwickeln von Webclientanwendungen für systemeigene XML-Webdienste in SQL Server bietet ein hilfreiches Tool zur Problembehandlung die Möglichkeit, SOAP-Nachrichten zu beobachten und nachzuverfolgen, die zwischen einer Instanz von SQL Server und der Clientanwendung ausgetauscht werden.

Dieses Thema enthält eine Beispielklassenbibliothek, die SOAP-Erweiterungsheader implementiert, die die SOAP-Ablaufverfolgung von Clientanwendungsprojekten innerhalb von Visual Studio 2005 unterstützen. Wenn Sie diese Erweiterungen in Ihr Projekt einbinden, führen sie die Ablaufverfolgung aus und zeigen den Inhalt der SOAP-Anforderungs- und entsprechenden Antwortnachrichten an.

Diese Bibliothek kann vorhandenen SOAP-Clientprojekten von Visual Studio 2005 hinzugefügt werden. Sie umfasst die Beispielanwendungen, die unter Beispielanwendungen für das Senden systemeigener XML-Webdiensteanforderungen bereitgestellt werden. Es wird empfohlen, dass Sie sich mit den konzeptionellen und prozedurbezogenen Informationen vertraut machen, die unter Festlegen, dass der Server Anforderungen systemeigener XML-Webdienste überwacht und Schreiben von Clientanwendungen bereitgestellt werden.

Wenn Sie mit dem Format von SOAP-Nachrichten nicht vertraut sind, finden Sie weitere Informationen dazu in den folgenden Themen:

HinweisHinweis

Das folgende Verfahren geht davon aus, dass Sie eine vorhandene SOAP-Clientanwendung mit Visual Studio 2005 erstellt und einen Webverweis auf einen HTTP SOAP-Endpunkt hinzugefügt haben, der mit SQL Server wie unter Senden von SOAP-Anforderungen mithilfe des Visual Studio 2005-Clients (C#) gezeigt erstellt wurde.

So fügen Sie einem Visual Studio-Projekt die Beispielbibliothek für die SOAP-Ablaufverfolgung hinzu

  1. Kopieren Sie mithilfe des Editors den Inhalt der C#-Code-Auflistung für SQL SOAP-Trace-Beispielklassenbibliothek, fügen Sie ihn ein, und speichern Sie ihn dann unter dem Namen "SqlSoapTracer.cs" in dem Ordner, der auch die SOAP-Clientprojektdateien enthält.

  2. Starten Sie auf dem Clientcomputer Microsoft Visual Studio 2005 über die Programmgruppe Microsoft Visual Studio 2005.

  3. Klicken Sie auf Projekt öffnen.

  4. Suchen Sie die SOAP-Clientprojektdatei (CSPROJ-Datei), und wählen Sie diese aus.

  5. Führen Sie im Fenster des Projektmappen-Explorers folgende Schritte aus:

    1. Wählen Sie das Projekt anhand des Namens aus, klicken Sie mit der rechten Maustaste, zeigen Sie auf Hinzufügen, und klicken Sie dann auf Vorhandenes Element hinzufügen.

    2. Suchen Sie im Dialogfeld Vorhandenes Element hinzufügen die Datei SqlSoapTracer.cs in dem Ordner, in dem Sie sie in Schritt 1 gespeichert haben, und wählen Sie sie aus.

    3. Wählen Sie Alle Dateien anzeigen aus, und erweitern Sie den Knoten Webverweise. Wählen Sie die Datei Reference.cs aus.

  6. Aktualisieren Sie im Fenster des Code-Editors die Datei Reference.cs, indem Sie darin zunächst die Einstiegspunkte für Ihre Webmethoden suchen.

    Wenn Sie beispielsweise dem unter Senden von SOAP-Anforderungen mithilfe des Visual Studio 2005-Clients (C#) beschriebenen Beispielprojekt Unterstützung für die SOAP-Ablaufverfolgung hinzufügen, lauten die Einstiegspunkte für die veröffentlichten Webmethoden der verschiedenen Webmethoden in diesem Projekt wie folgt:

    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. Zum Hinzufügen der Unterstützung für die SOAP-Ablaufverfolgung beim Ausführen der Webmethoden im Clientcode fügen Sie im Code der Datei Reference.cs den folgenden snoopattribute()-Aufruf direkt vor dem Einstiegspunkt jeder Webmethode ein, für die Sie die Ablaufverfolgung ausführen möchten, wie in den folgenden Codezeilen gezeigt.

    [snoopattribute()]
    public object[] GetCustomerInfo(...) {...}
    ...
    [snoopattribute()]
    public System.Data.SqlTypes.SqlInt32 UDFReturningAScalar() {...}
    

    Auf diese Weise wird eine SOAP-Erweiterung registriert, die die SOAP-Ablaufverfolgung dieser Webmethoden aufruft, wenn diese ausgeführt werden.

Hinzufügen der Unterstützung für die SOAP-Ablaufverfolgung zum Testen Ihrer Anwendung

Führen Sie folgende Schritte aus, um die im vorhergehenden Code bereitgestellten Erweiterungen zur Unterstützung der SOAP-Ablaufverfolgung beim Ausführen von SOAP-Clientanwendungen in der Visual Studio-Entwicklungsumgebung zu verwenden:

  1. Verwenden Sie entweder das in SQL Server Management Studio bereitgestellte oder das osql-Befehlszeilenprogramm, um eine Webmethode hinzuzufügen, die die zu testende gespeicherte Prozedur oder benutzerdefinierte Funktion auf dem Endpunkt verfügbar machen soll.

    Weitere Informationen finden Sie unter Verfügbarmachen der Programmierbarkeit von SQL im Web.

  2. Wenn Sie dies nicht bereits durchgeführt haben, codieren, debuggen und erstellen Sie eine SOAP-Clientanwendung in Visual Studio.

    Sie können dazu das unter Senden von SOAP-Anforderungen mithilfe des Visual Studio 2005-Clients (C#) beschriebene Beispielprojekt verwenden.

  3. Fügen Sie dem Projekt die SqlSoapTracer.cs-Klasse hinzu, wie im vorherigen Abschnitt beschrieben.

  4. Speichern und kompilieren Sie Ihre Clientanwendung, und führen Sie sie in der Visual Studio-Entwicklungsumgebung aus.

    Beim Ausführen der Anwendung wird ein Windows-Zwischenablagen-Viewerobjekt erstellt. Wenn jetzt die Webmethoden, für die Sie in Schritt 3 die Ablaufverfolgung aktiviert haben, ausgeführt werden, zeigt das Viewerobjekt für jede Webmethode Folgendes an:

    • Die SOAP-Clientanforderungsnachricht, wie sie durch den Clientcode generiert wurde.

    • Die SOAP-Serverantwortnachricht, wie sie von den systemeigenen XML-Webdiensten für SQL Server zurückgegeben wurde.

    Um den Inhalt der Windows-Zwischenablage nach einer Ablaufverfolgungsaktivität anzuzeigen, können sie ihn in den Windows-Editor einfügen.

Funktionsweise der Unterstützung für die SOAP-Ablaufverfolgung

Der Ablaufverfolgungsmechanismus verwendet vordefinierte Rückrufe und Ereignisse, die Teil der Implementierung der systemeigenen XML-Webdienste in SQL Server sind. Dabei handelt es sich um zwei Ereignisse: BeforeSerialize und AfterSerialize.

Diese Ereignisse und Rückrufe ermöglichen, dass die SOAP-Anforderung und die entsprechende SOAP-Serverantwort aufgefangen und an einen Ausgabestrom weitergeleitet werden. In dem bereitgestellten Code wird die Ausgabe in ein System.Windows.Forms.Clipboard-Objekt umgeleitet. Das Clipboard-Objekt empfängt die SOAP-Clientanforderungs- und Serverantwortnachrichten, die durch Ausführen der Webmethoden ausgetauscht werden, die den snoopattribute()-Aufrufen unmittelbar vorangestellt sind, und zeigt sie an.

Die Ausgabe der Clientanforderung und die von SQL Server ausgegebene Antwort darauf erfolgt in einem der Struktur der SOAP-Anforderungsnachricht und der Struktur der SOAP-Antwortnachricht gleichenden Format. Vom Server generierte Ergebnisse, wie z. B. die serialisierte XML-Ausgabe einer erfolgreich ausgeführten Webmethode, werden ebenfalls in der Antwort angezeigt. Falls ein Fehler auftritt, wird die Struktur der SOAP-Fehlernachricht anstelle der serialisierten XML-Ausgabe in der vom Server zurückgegebenen Antwort angezeigt.