2010-07-01 14 views
5

Ich habe zwei WSDL-Dateien mit freigegebenen Typen erstellt, die aus der XSD-Schemadatei importiert wurden.Web-Service und Client mit freigegebenen Typen erstellen

Danach habe ich erstellt Web-Services mit Schnittstelle von Wsdl.exe-Tool mit Parameter/serverInterface generiert.

Erste Web-Service, haben Web-Methode "RegisterData" mit in die Warteschlange einige komplexe Objekt zu verarbeiten, von System "A". Als Ergebnis dieser Methode wird Boolean zurückgegeben (mit der Information, dass das Objekt erfolgreich registriert wurde).

Zweiter Web-Service, haben Web-Methode "UpdateData", um einige Daten in System "B" basierend auf dem gleichen Objekt zu aktualisieren, mit im Prozess auf System "A" geändert wurde.

Also im System "A" muss ich Client für den zweiten Webdienst erstellen, wo ich Methode "UpdateData" mit diesem modifizierten komplexen Objekt us-Argument aufrufen werde.

Aber wenn ich diesen Client in Visual Studio (durch Hinzufügen von Web-Referenz oder Hinzufügen von Service-Referenz) erstellen, muss ich einige Namespaces für den Client erstellen. Und dann, wenn ich versuche, "UpdateData" -Agument aufzurufen, habe ich einen anderen Namespace für dasselbe Objekt, der von der ersten "RegisterData" -Methode des Webdienstes empfangen wurde.

Ich möchte ersten Web-Service und zweiten Web-Service-Client erstellen, wo ich das gleiche Objekt zwischen ihnen verwenden kann.

Vielen Dank für Ihre Hilfe.

Antwort

4

Ich glaube nicht, dass dies mit ASMX Web Services möglich ist.

WCF unterstützt dies jedoch.


WCF Links:


Eigentlich, denke ich, dass ich Ihre Frage falsch verstanden haben. Ich habe versucht, die gleichen Typen zwischen dem Client und dem Server zu teilen. ASMX kann das nicht tun. Es scheint jedoch, dass Sie versuchen, die gleichen Typen zwischen zwei Client-Proxies zu teilen. Das können Sie problemlos mit dem Tool WSDL.EXE tun.

Betrachten Sie ein Schema, DataTypes.xsd und zwei WSDL-Dateien, die es importieren, ServiceA.wsdl und ServiceB.wsdl. Um die Server-Schnittstellen zu erstellen, verwenden:

wsdl/serverInterface /n:SharedTypes.Servers /out:Services.cs ServiceA.wsdl ServiceB.wsdl DataTypes.xsd

Diese Schnittstellen schaffen, die Sie kann implementieren, um Ihre Dienste zu erstellen. Diese Schnittstellen verwenden beide einen Satz von Klassen, die aus DataTypes.xsd erstellt wurden. Um die Proxy-Klassen zu erstellen, verwenden Sie einfach:

Wsdl /n:SharedTypes.Proxies /out:Proxies.cs ServiceA.wsdl ServiceB.wsdl Datentypen.xsd

Beachten Sie, dass die /sharedTypes Schalter nicht brauchen. Das hat einen anderen Zweck. Es dient zum Kombinieren von Typen externer Dienste, wenn Sie die WSDL und XSD aus dem Dienst herunterladen müssen.

Ich habe versucht, dies mit einem Beispiel wie deins, ServiceA eine Nachricht in eine Warteschlange zu buchen, und ein Client diese Nachricht abholen und an ServiceB senden. Es funktioniert ganz gut.

+0

Haben Sie irgendein Beispiel bekam oder einen Artikel über diese Methode? – Siekiera

0

Ich stimme zu, dass dies nicht über die VS Web Reference-Funktionalität möglich ist. Um Ihre Anforderungen zu erfüllen, können Sie das Dienstprogramm wsdl.exe mit dem Schalter/sharetypes verwenden.

Weitere Informationen finden Sie Web Services Description Language Tool (Wsdl.exe)

Verwandte Themen