Beispielanwendungen für das Senden systemeigener XML-Webdiensteanforderungen
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.
- Senden von SOAP-Anforderungen mithilfe des Visual Studio 2005-Clients (C#)
- Senden von SOAP-Anforderungen mithilfe des Visual Studio 2005-Clients (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. Weitere Informationen zum Installieren der AdventureWorks-Beispieldatenbanken finden Sie unter Ausführen des Setups zum Installieren der Beispieldatenbanken und Beispiele für AdventureWorks. |
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 aufDEFAULT
festgelegt. Daher kann der Client eine WSDL-Antwort vom Server anfordern. - Der
BATCHES
-Wert wird aufENABLED
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 imNAMESPACE
-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.
Siehe auch
Verweis
Hinzufügen von SOAP-Headern zu Clientanwendungen
Hinzufügen der Unterstützung für die SOAP-Ablaufverfolgung zu Clientanwendungen
Festlegen, dass der Server Anforderungen systemeigener XML-Webdienste überwacht
Struktur der SOAP-Anforderungs- und -Antwortnachrichten
Richtlinien und Einschränkungen für die Verwendung der systemeigenen XML-Webdienste
Konzepte
Verarbeiten des xml-Datentyps und CLR-benutzerdefinierter Datentypen
Andere Ressourcen
Schreiben von Clientanwendungen