Share via


Verwenden der benutzerdefinierten WSDL-Anwendung

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.

Zum Einrichten der benutzerdefinierte WSDL-Anwendung müssen Sie die folgenden Aufgaben ausführen:

  • Erstellen einer benutzerdefinierten WSDL-Handleranwendung zur Unterstützung Ihrer WSDL-Anwendung.

    Anweisungen zum Ausführen dieser Aufgabe finden Sie unter Erstellen der benutzerdefinierten WSDL-Anwendung.

  • Konfigurieren Sie Ihre Installation von SQL Server, um den benutzerdefinierten WSDL-Handler zu registrieren und verwenden zu können.

Diese Aufgabe schließt das Erstellen eines Bereitstellungsskripts ein, das die folgenden Änderungen an der Installation von SQL Server vornimmt:

  • Es fügt die benutzerdefinierte WSDL-Assembly (CustomWSDL.dll) dem Server hinzu und registriert sie für die Verwendung mit der ADD ASSEMBLY-Anweisung.

  • Es erstellt alle zusätzlichen gespeicherten Prozeduren, die Ihre benutzerdefinierte WSDL-Handleranwendung für die ordnungsgemäße Ausführung benötigt.

  • Es erstellt oder ändert einen HTTP-Endpunkt in der Instanz von SQL Server, sodass sie Ihren benutzerdefinierten WSDL-Handler verwendet und anstelle der standardmäßigen oder der einfachen WSDL-Antwort eine benutzerdefinierte WSDL-Antwort zurückgibt.

Bereitstellen des benutzerdefinierten WSDL-Handlers

Die folgende Prozedur setzt voraus, dass Sie als lokaler Administrator an einem Computer, auf dem SQL Server ausgeführt wird, angemeldet sind, oder dass Sie mit diesem eine Remoteverbindung mit Administratorrechten herstellen können.

Teil 1: Konfigurieren des Servers

  1. Klicken Sie in SQL Server Management Studio auf Neue Abfrage, und stellen Sie eine Verbindung mit dem Server her.

  2. Kopieren Sie das folgende Transact-SQL-Skript in das Abfragefenster.

    USE master 
    GO
    
    -- Drop myWSDL procedure if it exists.
    IF (SELECT count(*) FROM sysobjects WHERE name = 'myWSDL') = 1 
    DROP PROCEDURE myWSDL
    GO
    
    -- Drop CustomWSDL assembly if it exists.
    DROP ASSEMBLY CustomWSDL
    GO
    
    -- Update the path to the compiled assembly as necessary.
    CREATE ASSEMBLY CustomWSDL FROM 'C:\temp\CustomWSDL.dll'
    GO 
    
    -- Create a stored procedure to map to the common lanugage
    -- runtime (CLR) method As with any other SQL Server stored procedure
    -- that maps to a CLR method, the actual stored procedure name 
    -- ('myWSDL') can be arbitrarily specified.
    CREATE PROCEDURE myWSDL
    (
    @endpointID as int,
    @isSSL as bit,
    @host as nvarchar(256),
    @queryString as nvarchar(256),
    @userAgent as nvarchar(256)
    )
    AS EXTERNAL NAME CustomWSDL.[MSSql.CustomWSDL].GenerateWSDL
    GO
    
    -- Follow the security guidelines set up for your environment.
    -- The following example is meant to be used for development or 
    -- testing purposes only.
    GRANT EXEC on myWSDL to [PUBLIC]
    GO
    
    -- The following is a sample stored procedure (InOut) that
    -- demonstrates the configuration of an HTTP endpoint. 
    -- If the InOut stored procedure already exists, it is dropped.
    IF (SELECT count(*) FROM sysobjects WHERE name = 'InOut') = 1 DROP PROC InOut
    GO
    
    CREATE PROC InOut
             @InParam int,
             @OutParam nvarchar(100) output
    AS
    SELECT * FROM syslanguages WHERE langid = @InParam
    SELECT @OutParam = [name] FROM syslanguages WHERE langid = @InParam
    PRINT @OutParam
    SELECT * FROM syslanguages WHERE langid = @InParam FOR XML raw, XMLSCHEMA
    RETURN 1
    GO
    GRANT EXEC on InOut to [PUBLIC]
    
    -- The following creates a sample HTTP endpoint to demonstrate 
    -- the endpoint setup. If the sample endpoint already exists, it
    -- is first dropped.
    IF (SELECT count(*) FROM [msdb].sys.http_endpoints WHERE name = 'sql_endpoint') = 1
    DROP ENDPOINT sql_endpoint
    GO
    
    CREATE ENDPOINT sql_endpoint
             STATE=STARTED
    AS HTTP (
             SITE='*',
             PATH='/sql/WSDL',
             PORTS=(CLEAR),
             CLEAR_PORT=80,
             AUTHENTICATION=(DIGEST, INTEGRATED)
    )
    FOR SOAP
    (
             WEBMETHOD 'http://myNS.com/'.'InOut' ( NAME='master.dbo.InOut' ),
             DATABASE = 'master',
             WSDL='master.dbo.myWSDL',
             Batches=enabled,
             SCHEMA = STANDARD
    )
    
    GRANT CONNECT ON ENDPOINT::sql_endpoint to [PUBLIC]
    
  3. Führen Sie das Skript aus.

Teil 2: Testen des Handlers

Um sicherzustellen, dass der benutzerdefinierte WSDL-Handler ordnungsgemäß funktioniert, versuchen Sie, die geänderten URL-Abfragezeichenfolgen zu verwenden, um eine benutzerdefinierte WSDL-Antwort anzufordern. Wenn beispielsweise die Instanz von SQL Server, mit der Sie die Verbindung herstellen, den Namen MyServer trägt und das oben angeführte Skript verwendet wird, muss dessen Endpunktpfad sql/WSDL lauten. Der Endpunkt antwortet dann mithilfe des benutzerdefinierten WSDL-Handlers. Zum Testen der Verbindung mit diesem Endpunkt und Bereitstellen einer benutzerdefinierten WSDL-Anforderung verwenden Sie daher im HTTP-Webbrowserclient eine URL, wie z. B. die folgende:

http://MyServer/sql/WSDL?wsdlargument

Der Wert von argument kann ein beliebiger der folgenden, die Zeichenfolgen der einzelnen Client- und WSDL-Typen unterstützenden benutzerdefinierten WSDL-Bezeichner sein.

Benutzerdefinierte WSDL-URL

Beschreibung

everett

Für einfache Webclients; mithilfe von Visual Studio 2003-Entwicklertools entwickelt.

jbuilder

Für einfache Webclients; mithilfe von Borland JBuilder 9.0-Entwicklungstools entwickelt.

glue

Für einfache Webclients; mithilfe von webMethods Glue 5.0.1-Entwicklungstools entwickelt.

Wie in der folgenden Tabelle gezeigt, geben alle drei benutzerdefinierten <argument>-Werte WSDL-Antworten (systemeigene XSD-Typen) zurück. Wenn Sie das vollständige, erweiterte WSDL-Format erhalten möchten, können Sie der Argumentzeichenfolge der Abfrage extended hinzufügen.

Einfacher WSDL-Bezeichner

Erweiterter WSDL-Bezeichner

http://MyServer/sql/WSDL?wsdleverett

http://MyServer/sql/WSDL?wsdleverettextended

http://MyServer/sql/WSDL?wsdljbuilder

http://MyServer/sql/WSDL?wsdljbuilderextended

http://MyServer/sql/WSDL?wsdlglue

http://MyServer/sql/WSDL?wsdlglueextended