Unterschied zwischen Webreferenz und Servicereferenz?

132

Was ist der Unterschied zwischen Webreferenz und Dienstreferenz in WCF? Welches ist in WCF vorzuziehen?

John Saunders
quelle
Schauen Sie sich auch Channel Factories an - stackoverflow.com/questions/1698275/…
Manish Jain
1
hmm, vielleicht eine Antwort auswählen? gute Frage übrigens
Daniël Tulp

Antworten:

102

Die Antwort auf niedriger Ebene lautet hier, dass eine Webreferenz eine Client-Proxy-Klasse erstellt, mit der Ihr Code mit einem Webdienst kommunizieren kann, der über WSDL beschrieben wird und über SOAP oder HTTP GET kommuniziert (andere Poster geben an, dass es sich nur um ASMX handelt, aber Webreferenzen können auch mit Java-basierten Webdiensten oder Python-basierten oder Ruby kommunizieren, sofern alle über WSDL sprechen und dem WS-I-Interoperabilitätsstandard entsprechen.

Eine Dienstreferenz erstellt eine Client-Proxy-Klasse, die mit einem WCF-basierten Dienst kommuniziert: unabhängig davon, ob dieser WCF-Dienst ein Webdienst ist oder nicht.

Kevin Hoffman
quelle
1
+1 für das Hinzufügen, dass jeder Standard-Webdienst mit einer ordnungsgemäß formatierten WSDL die Kriterien erfüllt
sidney.andrews
Kann ich einem Java-basierten Webdienst einen Dienstverweis hinzufügen? Wäre es noch sinnvoll? da Java nichts über den wcf-Stack weiß ...
user20358
Ja, Sie können einen Dienstverweis zu einem Java-Webdienst usw. hinzufügen, wenn dieser über eine WSDL verfügt. Die Servicereferenz behandelt sie in diesem Fall wie eine "klassische" Webreferenz.
Brady Moritz
+1 für die Angabe, dass der Webdienst WSDL-beschriebene Webdienste sowie ASMX verwenden kann. Tatsächlich habe ich eine Geschäftsschicht mit einer Webreferenz und einer Servicereferenz. Die Webreferenz verwendet einen WSDL-Webdienst, während die Dienstreferenz einen ASMX-Dienst verwendet.
Jagd
67

Mit einer Webreferenz können Sie mit jedem Dienst kommunizieren, der auf einer Technologie basiert, die das WS-I-Basisprofil 1.1 implementiert, und die relevanten Metadaten als WSDL verfügbar machen. Intern wird der ASMX-Kommunikationsstapel auf der Clientseite verwendet.

Mit einer Dienstreferenz können Sie mit jedem Dienst kommunizieren, der auf einer Technologie basiert, die eines der vielen von WCF unterstützten Protokolle implementiert (einschließlich, aber nicht beschränkt auf WS-I Basic Profile). Intern wird der WCF-Kommunikationsstapel auf der Clientseite verwendet.

Beachten Sie, dass beide Definitionen ziemlich weit gefasst sind und beide Dienste enthalten, die nicht in .NET geschrieben sind.

Es ist durchaus möglich (obwohl nicht empfohlen), eine Webreferenz hinzuzufügen, die auf einen WCF-Dienst verweist, sofern der WCF-Endpunkt basicHttpBindingeine kompatible benutzerdefinierte Variante verwendet.

Es ist auch möglich, eine Dienstreferenz hinzuzufügen, die auf einen ASMX-Dienst verweist. Wenn Sie neuen Code schreiben, sollten Sie immer eine Servicereferenz verwenden, nur weil diese flexibler und zukunftssicherer ist.

Christian Hayter
quelle
1
Kann mich jemand dazu bringen, einen Service über die Servicereferenz zu nutzen? Mit Web Reference scheine ich immer in der Lage zu sein, die Kernfunktionen in einer Art Serviceobjekt zu finden. Mit einer Servicereferenz nicht so sehr. Als Beispiel versuche ich, den FedEx-Tarifservice zu verwenden, um Preise für die verschiedenen FedEx-Versandoptionen zu erhalten. Ich weiß, dass irgendwo ein Aufruf von getRates () drin ist, aber ich kann ihn mit einer Servicereferenz nicht finden.
Ben Mills
@ BenMills: Suchen Sie nach einer Klasse mit einem ClientSuffix.
Christian Hayter
17

Die Dienstreferenz ist die neuere Schnittstelle zum Hinzufügen von Verweisen auf alle Arten von WCF-Diensten (möglicherweise keine Webdienste), während sich die Webreferenz speziell mit ASMX-Webreferenzen befasst.

Sie können über die erweiterten Optionen unter Dienstreferenz hinzufügen auf Webreferenzen zugreifen (wenn ich mich richtig erinnere).

Ich würde die Servicereferenz verwenden, da dies meines Wissens der neuere Mechanismus der beiden ist.

David Whitney
quelle
8
Service-Referenz hinzufügen -> Erweitert -> Web-Referenz hinzufügen ... nichts wie unintuitive Lösungen.
Jagd
7

Dienstreferenzen befassen sich mit Endpunkten und Bindungen, die vollständig konfigurierbar sind. Mit ihnen können Sie Ihren Client-Proxy über ein beliebiges Transportprotokoll (HTTP, TCP, Shared Memory usw.) auf eine WCF verweisen.

Sie sind für die Arbeit mit WCF ausgelegt.

Wenn Sie ein WebProxy verwenden, sind Sie ziemlich an die Verwendung von WCF über HTTP gebunden

Brian Genisio
quelle
5

Ein weiterer zu berücksichtigender Punkt ist, dass die neue Benutzeroberfläche für die Serviceschnittstelle Ihnen viel mehr Flexibilität beim Erstellen Ihrer Proxy-Klasse bietet. Beispielsweise können Sie Datenverträge vorhandenen DLLs zuordnen, wenn diese übereinstimmen (tatsächlich ist dies das Standardverhalten).

Wagner Silveira
quelle