Freigeben über


Beispielanwendungen für das Senden systemeigener XML-Webdienstanforderungen

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.

Die folgenden funktionstüchtigen Vorlagen werden bereitgestellt, um den Vorgang des Sendens von SOAP-Anforderungen und die Verarbeitung der Antworten zu zeigen. Diese Beispiele enthalten einen Visual Studio 2005-Client für C# und Visual Basic.

Anfangssetup

Alle Beispielanwendungen erfordern ein gemeinsames Setup. Dieses Setup umfasst die folgenden Schritte:

  1. Erstellen einer gespeicherten Beispielprozedur.

  2. Erstellen einer benutzerdefinierten Funktion.

  3. Erstellen des HTTP SOAP-Endpunktes.

HinweisHinweis

Um diese Objekte in der AdventureWorks-Beispieldatenbank zu erstellen, können Sie SQL Server Management Studio oder das osql-Befehlszeilen-Dienstprogramm verwenden. Informationen zum Installieren der AdventureWorks-Beispieldatenbank finden Sie unter Überlegungen zum Installieren der SQL Server-Beispiele und -Beispieldatenbanken.

Erstellen der gespeicherten Prozedur (GetCustomerInfo)

Die folgende gespeicherte Prozedur soll zeigen, wie eine Clientanwendung Eingabe- und Ausgabeparameter, Rückgabecode, Abfrageergebnisse und Fehler behandelt, wenn ein Fehler auftreten sollte.

USE AdventureWorks
GO
DROP PROCEDURE GetCustomerInfo
GO
CREATE PROCEDURE GetCustomerInfo
                    @CustomerID nchar(5),
                    @OutputParam nchar(5) OUTPUT 
AS  

  SELECT @OutputParam = '99999'  
  -- The following INSERT should fail, and an-error returned 
  -- to the client.
  INSERT Store (CustomerID) VALUES (1)

 -- Execute a SELECT statement.
 SELECT top 3 SalesOrderID, OrderDate 
 FROM   Sales.SalesOrderHeader
 WHERE  CustomerID = @CustomerID

 -- Execute SELECT returning XML.
  SELECT CustomerID, SalesOrderID, OrderDate 
  FROM   Sales.SalesOrderHeader
  WHERE  CustomerID = @CustomerID
  for xml auto, XMLSCHEMA

  PRINT 'Hello World'
RETURN 0
Go

Diese gespeicherte Prozedur besitzt zwei Parameter: einen Eingabeparameter (CustomerID) und einen Ausgabeparameter (OutParam), anhand derer gezeigt wird, wie Parameter übergeben werden.

Die gespeicherte Prozedur führt die folgenden Anweisungen aus:

  • Eine INSERT-Anweisung, die absichtlich einen Fehler erzeugt und zurückgibt. Der Fehler ist beabsichtigt, damit gezeigt werden kann, wie Fehler in der SOAP-Antwort zurückgegeben werden. In Visual Studio 2005 werden die Fehler als SqlMessage-Objekte zurückgegeben.

  • Eine SELECT-Anweisung. In Visual Studio 2005 wird das sich ergebende Rowset als DataSet-Objekt zurückgegeben.

  • Eine SELECT FOR XML-Abfrage, die XML-Daten zurückgibt. In Visual Studio 2005 wird das sich ergebende Rowset als SqlXml-Objekt zurückgegeben.

  • Eine PRINT-Anweisung. Das Ergebnis dieser Anweisung wird in Visual Studio 2005 als SqlMessage-Objekt zurückgegeben.

Erstellen der benutzerdefinierten Funktion (UDFREturningAScalar)

Diese Funktion gibt einen ganzzahligen Wert zurück.

USE AdventureWorks
GO
CREATE FUNCTION UDFReturningAScalar() 
RETURNS int
AS
BEGIN
   RETURN 555
END
Go

Erstellen des HTTP SOAP-Endpunktes (sql_endpoint)

Dieser Endpunkt macht die gespeicherte Prozedur und die benutzerdefinierte Funktion als Webmethoden verfügbar. Der Endpunkt wird außerdem so konfiguriert, dass Ad-hoc-Abfragen ermöglicht werden. Die Clientanwendung kann SOAP-Anforderungen für Ad-hoc-Abfragen an den Endpunkt senden.

Beachten Sie, dass der Servername als Wert von hostname bereitgestellt werden muss, wenn Sie den HTTP-Namespace (sp_reserve_http_namespace) für Ihren Endpunkt reservieren und die SITE-Parameter angeben. Außerdem muss der Wert von port dem HTTP-Anschluss entsprechen, der von der Instanz von SQL Server verwendet wird, z. B. "80" oder ggf. eine andere TCP-Anschlussnummer.

USE AdventureWorks
GO
DROP ENDPOINT sql_endpoint
GO
EXEC sp_reserve_http_namespace N'http://hostname:port/sql' 
-- EXEC sp_reserve_http_namespace N'https://www.microsoft.com:80/sql' for example
GO
CREATE ENDPOINT sql_endpoint 
   STATE = STARTED
AS HTTP(
   PATH = '/sql', 
   AUTHENTICATION = (INTEGRATED ), 
   PORTS = ( CLEAR ),
   SITE = 'server'
)
FOR SOAP (
   WEBMETHOD 'http://tempUri.org/'.'GetCustomerInfo' 
            (name='AdventureWorks.dbo.GetCustomerInfo', 
             schema=STANDARD ),
   WEBMETHOD 'UDFReturningAScalar' 
            (name='AdventureWorks.dbo.UDFReturningAScalar'),
   BATCHES = ENABLED,
   WSDL = DEFAULT,
   DATABASE = 'AdventureWorks',
   NAMESPACE = 'http://Adventure-Works/Customers'
)
GO
USE master
EXEC sp_grantlogin @loginame='domain\userOrGroup'
EXEC sp_grantdbaccess @loginame='domain\userOrGroup'
GRANT CONNECT ON ENDPOINT::sql_endpoint TO [domain\userOrGroup]
GO

Beachten Sie im vorherigen Code Folgendes:

  • Beim Erstellen dieses Endpunktes werden zwei Webmethoden definiert.

  • Der WSDL-Wert wird auf DEFAULT festgelegt. Daher kann der Client eine WSDL-Antwort vom Server anfordern.

  • Der BATCHES-Wert wird auf ENABLED festgelegt. Daher kann der Client Ad-hoc-Abfrageanforderungen an diesen Endpunkt senden.

  • Die Webmethode UDFReturningAScalar gibt nicht den optionalen Namespace an. Sie verwendet den Namespace, der im NAMESPACE-Wert angegeben wird.

  • Die Werte von domain\userOrGroup, die als SQL Server-Anmeldung erstellt werden, sollten auf den tatsächlichen Domänenbenutzer oder die -gruppe festgelegt werden, der bzw. die Zugriff auf den HTTP-Endpunkt benötigt.