Erhöht WCF die Messlatte oder nur die Komplexität? [geschlossen]


84

Ich verstehe den Wert des dreiteiligen Service- / Host- / Client-Modells von WCF. Aber bin ich es nur, oder scheint es, als hätte WCF etwas ziemlich Direktes und Unkompliziertes (das ASMX-Modell) genommen und daraus ein Chaos gemacht?

Gibt es eine Alternative zur Verwendung der Befehlszeile von SvcUtil, um den Proxy zu generieren? Bei ASMX-Diensten wurde automatisch ein Testkabel bereitgestellt. Gibt es heute eine gute Alternative mit WCF?

Ich schätze, dass das WS * -Ding enger in WCF integriert ist und hoffe, dass sich dort etwas für WCF auszahlt, aber meine Güte, sonst bin ich ratlos.

Auch der Stand der für WCF verfügbaren Bücher ist bestenfalls miserabel. Juval Lowy, ein hervorragender Autor, hat ein gutes O'Reilly-Nachschlagewerk "Programming WCF Services" geschrieben, aber es tut nicht viel (für mich jedenfalls), um jetzt zu lernen, wie man WCF benutzt. Der Vorläufer dieses Buches (und als Tutorial etwas besser organisiert, aber nicht viel) ist Michele Leroux Bustamantes Learning WCF. Es hat gute Plätze, ist aber veraltet und die entsprechende Website ist verschwunden.

Haben Sie gute WCF-Lernreferenzen, außer weiterhin den Bejebus aus den Dingen heraus zu googeln?


3
Wenn Sie nach einem guten Testclient für WCF-Dienste suchen. Suchen Sie nicht weiter als msdn.microsoft.com/en-us/library/bb552364.aspx
Strelok

Antworten:


61

Okay, los geht's. Zunächst wurde das Buch von Michele Leroux Bustamante für VS2008 aktualisiert. Die Website für das Buch ist nicht weg. Es ist gerade in Betrieb und es gibt jede Menge großartiger WCF-Informationen. Auf dieser Website bietet sie aktualisierten Code, der mit VS2008 kompatibel ist, für alle Beispiele in ihrem Buch. Wenn Sie bei Amazon bestellen, erhalten Sie den aktualisierten Nachdruck.

WCF ist nicht nur ein Ersatz für ASMX. Sicher, es kann (und funktioniert ganz gut) ASMX ersetzen, aber der wahre Vorteil ist, dass Ihre Dienste selbst gehostet werden können. Die meisten Funktionen von WSE wurden von Anfang an integriert. Das Framework ist hochgradig konfigurierbar und die Fähigkeit, mehrere Endpunkte über mehrere Protokolle hinweg zu bedienen, ist erstaunlich, IMO.

Sie können zwar weiterhin Proxy-Klassen mit der Option "Dienstreferenz hinzufügen" generieren, dies ist jedoch nicht erforderlich. Alles, was Sie wirklich tun müssen, ist, Ihre ServiceContract-Oberfläche zu kopieren und Ihrem Code mitzuteilen, wo sich der Endpunkt für den Service befindet, und das war's. Sie können Methoden aus dem Dienst mit sehr wenig Code aufrufen. Mit dieser Methode haben Sie die vollständige Kontrolle über die Implementierung. Unabhängig von der Methode, mit der Sie eine Proxy-Klasse generieren, zeigt Michele beide und verwendet beide in ihrer ausgezeichneten Reihe von Webcasts zu diesem Thema.

Michele hat jede Menge großartiges Material da draußen, und ich empfehle Ihnen, ihre Website (s) zu besuchen. Hier sind einige Links, die für mich unglaublich hilfreich waren, als ich WCF lernte. Ich hoffe, Sie werden feststellen, wie stark WCF wirklich ist und wie einfach es zu implementieren ist. Die Lernkurve ist etwas steil, aber die Belohnungen für Ihre Zeitinvestition sind es wert:

Ich empfehle Ihnen, mindestens einen von Michelles Webcasts anzusehen. Sie ist eine sehr effektive Moderatorin und sie ist offensichtlich unglaublich kompetent, wenn es um WCF geht. Sie macht einen großartigen Job darin, das Innenleben von WCF von Grund auf zu entmystifizieren.


3
Großartige Ressourcen. Ich würde nicht so weit gehen zu sagen, dass rp WCF oder die Autoren verprügelt hat. Auch ich habe mich ein wenig überwältigt gefühlt, als ich versucht habe, mir WCF anzuschauen, nachdem ich so viel Zeit in ASMX verbracht habe. Ich weiß, dass es besser ist und ich möchte es erleben, aber es ist schwierig, einen Einstiegspunkt zu finden, wie Sie es mit ASMX könnten.
Chris Stewart

15

Danke für die Links. Nur neugierig, weißt du was mit Buddhike passiert ist? Er scheint vom Erdboden verschwunden zu sein. Das neue Blog, das er unter blogs.thinktecture.com/buddhike erwähnt, existiert (nicht mehr). Es ist, als hätte er diese sterbliche Hülle abgemischt. (Welche Träume können kommen?) Danke.
Jim Raden


14

Es fällt mir schwer zu sehen, wann ich WCF verwenden sollte oder würde. Warum? Weil ich Produktivität und Einfachheit ganz oben auf meine Liste setze. Warum war das ASMX-Modell so erfolgreich, weil es funktioniert hat und Sie es schnell zum Laufen bringen? Und mit VS 2005 und .NET 2.0 spuckte wsdl.exe ziemlich nette und konforme Dienste aus.

Im wirklichen Leben sollten Sie nur sehr wenige Kommunikationsprotokolle in Ihrer Architektur haben. Dies hält es einfach und wartbar. Wenn Sie auf Legacy-Systeme zugreifen müssen, schreiben Sie spezielle Adapter für diese, damit sie in der schönen, glänzenden und schönen SOA-Welt mitspielen können.


WCF soll ein einheitlicher Rahmen für all diese Protokolle sein. Es führt SOAP, REST und mit dem WSCF-Adapter-SDK auch diese "Legacy-System" -Verbindungen innerhalb des WCF-Modells aus.
Cheeso

3
Dies hängt davon ab, wie Sie die "Produktivität" messen. Ich würde es vorziehen, wenn ein Entwickler 2 - 3 Tage braucht, um sich jetzt damit zu beschäftigen, denn die Vorteile sagen, in 6 Monaten. WCF ersetzt mehr als nur Webservices.
Christian Payne

1
Ich stimme zu 100% zu%. Wenn Sie nur Webdienste möchten und schnell versenden müssen (wer nicht?), Ist es ASMX, Baby! WCF ist ein riesiger Vorschlaghammer - totaler Overkill, wenn Sie nur grundlegende Webdienste benötigen. Nur weil es das glänzende neue Ding ist, heißt das nicht, dass Sie davon ausgehen sollten, dass es für alle Szenarien immer besser ist. Und nur weil WCF schwer zu verstehen ist, sind Sie keine kluge Person für die Auswahl. Mehr Kraft für diejenigen, die den Mut haben, sich zu weigern, auf den WCF-Zug zu springen!
Saille

13

WCF ist viel leistungsfähiger als ASMX und erweitert es auf verschiedene Arten. ASMX ist nur auf HTTP beschränkt, während WCF mehrere Protokolle für seine Kommunikation verwenden kann (zugegeben, HTTP wird immer noch von den meisten Benutzern verwendet, zumindest für Dienste, die interoperabel sein müssen). WCF ist auch einfacher zu erweitern. Zumindest ist es möglich, es so zu erweitern, dass ASMX nicht erweitert werden kann. "Easy" kann es dehnen. =)

Die zusätzliche Funktionalität von WCF überwiegt meiner Meinung nach bei weitem die Komplexität. Ich finde auch, dass das Programmiermodell einfacher ist. DataContracts sind viel besser, als beispielsweise die XML-Serialisierung mit öffentlichen Eigenschaften für alles serialisieren zu müssen. Es ist auch viel deklarativer in der Natur, was auch schön ist.


6

Warten Sie ... haben Sie jemals .NET Remoting verwendet, denn das ist die Realität, die es ersetzt. .NET Remoting ist selbst ziemlich kompliziert. Ich finde WCF einfacher und besser angelegt.


4

Ich sehe es nicht oft genug erwähnt, aber Sie können mit WCF immer noch ziemlich einfache Dienste implementieren, die den ASMX-Diensten sehr ähnlich sind. Beispielsweise:

[ServiceContract]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class SimpleService
{
    [OperationContract]
    public string HelloWorld()
    {
        return "Hello World";
    }

}

Sie müssen den Endpunkt noch in Ihrer web.config registrieren, aber das ist nicht so schlimm.

Das Eliminieren der Ausführlichkeit der getrennten Daten-, Dienst- und Betriebsverträge trägt wesentlich dazu bei, WCF für mich leichter handhabbar zu machen.


AspNetCompatibilityRequirements ist ein notwendiges Übel, wenn viele Entwickler von ihren ASMX-Diensten wechseln möchten, die derzeit einwandfrei funktionieren.
Dave Ward

@dan warum nicht AspNetCompatibilityRequirements ?
PreguntonCojoneroCabrón

@ DaveWard AspNetCompatibilityRequirements ist ein notwendiges Übel ?
PreguntonCojoneroCabrón

4

VS2008 enthält das Kontextmenüelement "Dienstreferenz hinzufügen", mit dem der Proxy hinter den Kulissen für Sie erstellt wird.

Wie bereits erwähnt, ist WCF nicht nur als Ersatz für die ASMX-Webdiensttypen gedacht, sondern bietet eine konsistente, sichere und skalierbare Methodik für alle interoperablen Dienste, unabhängig davon, ob es sich um HTTP-, TCP-, Named Pipes- oder MSMQ-Transporte handelt.

Ich werde gestehen, dass ich andere Probleme mit WCF habe (z. B. das Umschreiben von Methodensignaturen, wenn ein Dienst über basicHTTP verfügbar gemacht wird - siehe hier , aber insgesamt denke ich, dass es sich definitiv um eine Verbesserung handelt


3

Wenn Sie VS2008 verwenden und ein WCF-Projekt erstellen, erhalten Sie automatisch ein Test-Harness, wenn Sie auf run / debug klicken, und Sie können eine Referenz hinzufügen, ohne svcutil verwenden zu müssen.


2

Meine ersten Gedanken an WCF waren genau die gleichen! Hier sind einige Lösungen:

  1. Programmieren Sie Ihre eigene Proxy- / Client-Schicht mithilfe von Generika (siehe Klassen ClientBase , Bindung). Ich fand es einfach, mich an die Arbeit zu machen, aber schwer zu perfektionieren.
  2. Verwenden Sie eine Drittanbieter-Implementierung von 1 ( SoftwareIsHardwork ist mein aktueller Favorit).

2

WCF ist ein Ersatz für alle früheren Webdiensttechnologien von Microsoft. Es macht auch viel mehr als das, was traditionell als "Webdienste" angesehen wird.

WCF- "Webdienste" sind Teil eines viel breiteren Spektrums der Fernkommunikation, die über WCF ermöglicht wird. Sie erhalten ein viel höheres Maß an Flexibilität und Portabilität bei der Ausführung von Aufgaben in WCF als bei herkömmlichem ASMX, da WCF von Grund auf so konzipiert ist, dass alle von Microsoft angebotenen verteilten Programmierinfrastrukturen zusammengefasst werden. Ein Endpunkt in WCF kann über SOAP / XML genauso einfach kommuniziert werden wie über TCP / Binär. Das Ändern dieses Mediums ist einfach ein Mod für die Konfigurationsdatei. Theoretisch reduziert dies die Menge an neuem Code, die zum Portieren oder Ändern von Geschäftsanforderungen, Zielen usw. benötigt wird.

ASMX is older than WCF, and anything ASMX can do so can WCF (and more). Grundsätzlich kann man WCF als Versuch ansehen, die verschiedenen Möglichkeiten, zwei Apps in der Welt von Microsoft zur Kommunikation zu bringen, logisch zusammenzufassen. ASMX war nur eine dieser vielen Möglichkeiten und wird daher jetzt unter dem WCF-Dach zusammengefasst.

Auf Webdienste kann nur über HTTP zugegriffen werden, und es funktioniert in einer zustandslosen Umgebung, in der WCF flexibel ist, da seine Dienste in verschiedenen Arten von Anwendungen gehostet werden können. Häufige Szenarien für das Hosten von WCF-Diensten sind IIS, WAS, Selbsthosting und verwalteter Windows-Dienst.

Der Hauptunterschied besteht darin, dass Webdienste XmlSerializer verwenden. WCF verwendet jedoch DataContractSerializer, dessen Leistung im Vergleich zu XmlSerializer besser ist.

In welchen Szenarien muss WCF verwendet werden

  • Ein sicherer Service zur Abwicklung von Geschäftsvorfällen. Ein Service, der
  • liefert aktuelle Daten an andere, z. B. einen Verkehrsbericht oder andere
  • Überwachungsdienst. Ein Chat-Dienst, der es zwei Personen ermöglicht
  • Daten in Echtzeit kommunizieren oder austauschen. Eine Dashboard-Anwendung
  • das fragt einen oder mehrere Dienste nach Daten ab und präsentiert sie in einer logischen
  • Präsentation. Anzeigen eines mit Windows Workflow implementierten Workflows
  • Stiftung als WCF-Dienst. Eine Silverlight-Anwendung zum Abrufen von a
  • Service für die neuesten Daten-Feeds.

Merkmale von WCF

  • Serviceorientierung
  • Interoperabilität
  • Mehrere Nachrichtenmuster
  • Service-Metadaten
  • Datenverträge
  • Sicherheit
  • Mehrere Transporte und Codierungen
  • Zuverlässige Nachrichten und Nachrichten in der Warteschlange
  • Dauerhafte Nachrichten
  • Transaktionen
  • AJAX- und REST-Unterstützung
  • Erweiterbarkeit

Quelle: Haupttextquelle


Verwenden Sie jetzt WCF oder REST? oder WebAPI? oder MicroService?
PreguntonCojoneroCabrón

1

MSDN? Normalerweise kann ich mit der Bibliotheksreferenz selbst ziemlich gut umgehen, und ich erwarte normalerweise, dort wertvolle Artikel zu finden.


1

In Bezug auf das, was es bietet, denke ich, dass die Antwort Kompatibilität ist. Die ASMX-Dienste waren ziemlich Microsoft. Um nicht zu sagen, dass sie nicht versucht haben, mit anderen Verbrauchern kompatibel zu sein; Das Modell passte jedoch nur zu ASP.NET-Webseiten und einigen anderen benutzerdefinierten Microsoft-Verbrauchern. Während WCF aufgrund seiner Architektur ermöglicht, dass Ihr Service zusätzlich zu der üblichen SOAP über Endpunkte verfügt, die auf sehr offenen Standards basieren, z. B. REST, JSON usw. Andere Leute werden es wahrscheinlich viel einfacher haben, Ihren WCF-Dienst zu verbrauchen als Ihren ASMX-Dienst.

(Dies alles wird im Wesentlichen aus dem vergleichenden Lesen von MSDN abgeleitet, daher sollte sich jemand, der mehr weiß, frei fühlen, mich zu korrigieren.)


Ich hatte keine Probleme mit plattformübergreifenden ASMX-Diensten - XML ​​funktioniert dort ganz gut. Ich verstehe, dass WCF = Remoting + ASMX + MSMQ + WSE. Mein Rindfleisch ist, dass MS eine kleine "progressive Verbesserung" verwenden sollte, um WCF leichter zugänglich zu machen, und meine Frage ist, wie! Danke, rp
rp.

Die ASMX-Interoperabilität war sehr gut, obwohl der Aufwand bei WS-Security höher wurde.
Cheeso

1

WCF sollte nicht als Ersatz für ASMX angesehen werden. Gemessen an der Position und der internen Verwendung durch Microsoft ist es ein grundlegendes Architekturelement, das für jede Art von grenzüberschreitender Kommunikation verwendet wird.


Ja ... und als grundlegendes Kommunikationsframework sollte es ASMX- und ASP.NET-orientierte Webdienste ersetzen. Nein?
Cheeso

1

Ich glaube, dass WCF die Implementierung von ASMX-Webdiensten in vielerlei Hinsicht wirklich vorantreibt. Erstens bietet es ein sehr schönes Modell für mehrschichtige Objekte, mit dessen Hilfe die Komplexität verteilter Anwendungen verborgen werden kann. Zweitens können Sie mehr als nur Anforderungswiederholungs-Messaging-Muster haben, einschließlich asynchroner Benachrichtigungen von Server zu Client (unmöglich mit reinem HTTP), und drittens das zugrunde liegende Transportprotokoll von XML-Messaging abstrahieren und so HTTP, HTTPS, TCP und andere elegant unterstützen. Die Abwärtskompatibilität mit Webdiensten der 1. Generation ist ebenfalls von Vorteil. WCF verwendet den XML-Standard als internes Darstellungsformat. Dies könnte als Vor- oder Nachteil angesehen werden, insbesondere angesichts der wachsenden Beliebtheit "fettfreier Alternativen zu XML" wie JSON.


1

Die schwierigen Dinge, die ich bei WCF finde, sind die Verwaltung der Konfigurationen für Clients und Server und die Fehlerbehebung bei den nicht so schönen Ausnahmen für fehlerhafte Zustände.

Es wäre großartig, wenn jemand Abkürzungen oder Tipps für diese hätte.


1

Ich finde das ist ein Schmerz; , dass ich an beiden Enden .NET habe, an beiden Enden die gleichen "Vertrags" -Dlls geladen habe usw. Aber dann muss ich mit vielen Details wie "KnownType" -Attributen herumspielen.

WCF lässt standardmäßig nur 1 oder 2 Clients eine Verbindung zu einem Dienst herstellen, bis Sie viele Konfigurationen ändern. Das Ändern der Konfiguration von Code ist nicht einfach, der Versand vieler Comfig-Dateien ist keine Option, da es zu schwierig ist, unsere Änderungen mit Änderungen zusammenzuführen, die ein Kunde zum Zeitpunkt eines Upgrades vorgenommen hat (auch wir möchten keine Kunden mit WCF-Einstellungen spielen!)

.NET-Remoting funktionierte meistens nur.

Ich denke, der Versuch, so zu tun , als sei die objektbasierte Kommunikation von .NET zu .NET dasselbe wie das Senden von Text (xml) an ein unbekanntes System, war ein Schritt zu weit.

(Die wenigen Male, in denen wir WCF verwendet haben, um mit einem Java-System zu kommunizieren, stellten wir fest, dass die XSD, die das Java-System herausgab, nicht mit dem gewünschten XML übereinstimmte und daher viele XML-Zuordnungen von Hand codieren musste.)


Ich denke, die Leute sind ein wenig daneben, wenn sie sagen, dass WCF ein Ersatz für Remoting ist. Remoting ist immer noch eine gute Option, wenn Sie echte objektbasierte Aufrufe von .Net zu .Net ausführen und viel Kontrolle darüber haben möchten, wie die Dinge an beiden Enden eingerichtet werden. WCF hingegen ist darauf ausgerichtet, Dienste zu veröffentlichen, die jeder nach Belieben nutzen kann.
Tim Lovell-Smith

@Tim, Microsoft sagt jetzt, dass Sie WCF für alles verwenden und dass es ein Ersatz für Remoting ist. Remoting scheint das vergessene Kind der .net-Welt zu sein.
Ian Ringrose
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.