Web Reference vs. Service Reference

110

Ich habe gerade mit Paypal eine riesige Mauer getroffen. Ich hatte ein reguläres C # -Projekt erstellt, um einige Wrapper-Klassen mit ihrer WSDL zu erstellen.

Wenn Sie ein Nicht-Webprojekt erstellen, ist die einzige Option, die Sie zum Hinzufügen einer WSDL erhalten, eine Webdienstreferenz. Und dies schafft ein bisschen den gleichen Satz von Proxy-Klassen wie eine Web-Referenz, aber nicht wirklich. Es fügt mehr hinzu, als selbst die PayPal-Leute nicht wissen.

Daher war ich die ganze Zeit auf der Suche nach der richtigen Schnittstelle in dieser Liste von Proxy-Klassen, die als Service verwendet werden kann (SoapBinding), und die PayPalAPIAASoapBindingwar nicht da. Ich teilte unserem PayPal-Kontaktpunkt immer wieder mit.

Ich konnte nur die folgenden 2 Schnittstellen sehen, die mir erschienen, was ich verwenden musste, da ich keine sah, PayPalAPIAASoapBindingdie Sie in einer Webreferenz-basierten Dienstreferenz sehen können:

PayPalAPIAAInterfaceClient
PayPalAPIInterfaceClient 

Also habe ich herausgefunden, oh, ich habe wahrscheinlich eine Dienstreferenz im Vergleich zu einer Webreferenz erstellt, welche Webreferenz eine Option in einem Webprojekt ist. Ich möchte jedoch nicht, dass meine Servicereferenz eng mit meinem Webprojekt verknüpft ist. Deshalb habe ich das C # -Projekt erstellt.

Was zum Teufel ist eine Service-Referenz im Vergleich zu einer Web-Referenz? Und wie soll ich das in ein anderes Projekt aufteilen, wenn Service Reference mir eine Schleife wirft und mir eine Reihe anderer Schnittstellen gibt als eine Web Reference?

Um die Dinge noch verwirrender zu machen, verfügt VS 2008 über ein Webdienst-Anwendungsprojekt.

Also, was benutze ich? Wir verwenden das .NET 3.5-Framework und sind nicht bereit, auf WCF umzusteigen . Kann ich die neue Dienstreferenz auch dann noch verwenden, wenn ich WCF nicht verwende, oder was? Wenn Sie .NET 3.5 und noch nicht WCF verwenden und dennoch grundlegende Webdienste ausführen möchten, gehen Sie weiterhin die Route "Dienstreferenz" und verwenden Sie einfach nicht das WCF-Framework? Bedeutet das, dass es immer noch wie eine .NET 2.0-Webreferenz verwendet werden kann, nur dass Sie eine völlig andere Generation der WSDL erhalten?

PositiveGuy
quelle
2
8 Jahre später und immer noch relevant.
Mike Devenney

Antworten:

213

In Web - Referenz ist der im alten Stil, deprecated ASP.NET Web Service (ASMX) Technologie (nur die XmlSerializer für Ihre Sachen verwenden) - wenn Sie dies tun, erhalten Sie ein ASMX - Client für einen ASMX Web - Service. Sie können dies in nahezu jedem Projekt tun (Web-App, Website, Konsolen-App, Winforms - Sie nennen es).

Dienstreferenz hinzufügen ist die neue Methode, mit der eine WCF-Dienstreferenz hinzugefügt wird, die Ihnen ein viel fortschrittlicheres und flexibleres Dienstmodell bietet als nur altes ASMX-Material.

Da Sie nicht bereit sind, zu WCF zu wechseln, können Sie auch weiterhin die alte Webreferenz hinzufügen, wenn Sie dies wirklich müssen: Wenn Sie eine "Dienstreferenz hinzufügen" ausführen, klicken Sie im daraufhin angezeigten Dialogfeld auf [Erweitert ] in der linken Ecke der Schaltfläche:

Alt-Text

Wählen Sie im nächsten Dialogfeld unten die Schaltfläche [Webreferenz hinzufügen].

marc_s
quelle
6
Wie dumm ist es für MS, das in einem WCF-Dialogfeld zu verstecken! Macht nicht einmal Sinn mit der Platzierung hier
PositiveGuy
9
@coffeeaddict: Nun, ich denke, MS versucht, Sie auf subtile Weise dazu zu bewegen, standardmäßig WCF zu verwenden - und nur ASMX im alten Stil, wenn Sie wirklich entschlossen sind :-)
marc_s
27
Wenn Sie Alt + PrtScn verwenden, können Sie nur eine Momentaufnahme des aktuell aktiven Fensters machen. Auf diese Weise müssen Sie nicht manuell das ausschneiden, was Sie sehen möchten: o)
Ernest
Benötigt das auch .NET 2.0 auf dem Computer? Oder kann .NET 4.0 die .NET 2.0-basierte "Web Reference" -Technologie verarbeiten? Ich möchte es wissen, weil ich einen SOAP-Webservice als "Web Reference" in einer .NET 4.0-Anwendung bereitstelle.
Computerbenutzer
1
@sparkyShorts: ja.
marc_s
9

Wenn ich Ihre Frage richtig verstehe:

Um eine .net 2.0-Webdienstreferenz anstelle einer WCF-Dienstreferenz hinzuzufügen, klicken Sie mit der rechten Maustaste auf Ihr Projekt und klicken Sie auf "Dienstreferenz hinzufügen".

Klicken Sie dann unten links im Dialogfeld auf "Erweitert ..".

Klicken Sie dann unten links im nächsten Dialogfeld auf "Webreferenz hinzufügen".

Jetzt können Sie eine reguläre SOAP-Webreferenz hinzufügen, wie Sie suchen.

Elch
quelle
Benötigt das auch .NET 2.0 auf dem Computer? Oder kann .NET 4.0 die .NET 2.0-basierte "Web Reference" -Technologie verarbeiten? Ich möchte es wissen, weil ich einen SOAP-Webservice als "Web Reference" in einer .NET 4.0-Anwendung bereitstelle.
Computerbenutzer
4

Durch Hinzufügen einer Dienstreferenz können Sie einen WCF-Client erstellen, mit dem Sie mit einem regulären Webdienst kommunizieren können, sofern Sie die entsprechende Bindung verwenden. Durch Hinzufügen einer Webreferenz können Sie nur eine Webdienstreferenz (dh eine SOAP-Referenz) erstellen .

Wenn Sie absolut sicher sind, dass Sie nicht für WCF bereit sind (ich weiß wirklich nicht warum), sollten Sie eine reguläre Webdienstreferenz erstellen.

Otávio Décio
quelle
3
Weil WCF für Neulinge NICHT einfach ist. Und außerdem lässt mich mein Chef nicht dazu übergehen, das ist der wahre Grund. Es ist Code & Run hier. Wenn Sie diese Situation haben, kann ich nichts dagegen tun.
PositiveGuy
7
@coffeeaddict Ich denke, Sie und Ihr Chef sind falsch informiert. Beide Referenztypen erstellen eine Klasse, die Methoden zum Aufrufen der Dienstoperationen bereitstellt. Wie ist es relevant, dass die von einer "Service" -Referenz erstellte Klasse zufällig von einer Basisklasse erbt, die sich zufällig in einer Bibliothek befindet, die Microsoft als Teil einer Technologie betrachtet, die sie WCF nennt?
Daniel Pratt
1
Benötigt das auch .NET 2.0 auf dem Computer? Oder kann .NET 4.0 die .NET 2.0-basierte "Web Reference" -Technologie verarbeiten? Ich möchte es wissen, weil ich einen SOAP-Webservice als "Web Reference" in einer .NET 4.0-Anwendung bereitstelle.
Computerbenutzer
3

Am Ende machen beide dasselbe. Es gibt einige Unterschiede im Code: Web Services fügen keinen Root-Namespace des Projekts hinzu, aber Service Reference fügt dem Namespace des Projekts Serviceklassen hinzu. Die ServiceSoapClientKlasse erhält eine andere Benennung, was nicht wichtig ist. Bei der Arbeit mit TFS würde ich lieber Service Reference verwenden, da dies mit der Quellcodeverwaltung besser funktioniert. Beide arbeiten mit SOAP-Protokollen.

Ich finde es besser, die Servicereferenz zu verwenden, da sie neu ist und daher besser gewartet wird.

user3628475
quelle