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:
Erstellen einer gespeicherten Beispielprozedur.
Erstellen einer benutzerdefinierten Funktion.
Erstellen des HTTP SOAP-Endpunktes.
Hinweis |
---|
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.
In diesem Abschnitt
Senden von SOAP-Anforderungen mithilfe des Visual Studio 2005-Clients (C#)
Senden von SOAP-Anforderungen mithilfe des Visual Studio 2005-Clients (Visual Basic)
Hinzufügen der Unterstützung für die SOAP-Ablaufverfolgung zu Clientanwendungen
Verarbeiten des xml-Datentyps und CLR-benutzerdefinierter Datentypen