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?
quelle
Antworten:
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.
quelle
Normalerweise verwende ich Google, um meine WCF-Antworten zu finden, und finde mich normalerweise in den folgenden Blogs wieder:
Blogs mit wertvollen WCF-Artikeln
Andere wertvolle Artikel, die ich gefunden habe
quelle
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.
quelle
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.
quelle
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.
quelle
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:
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.
quelle
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
quelle
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.
quelle
Meine ersten Gedanken an WCF waren genau die gleichen! Hier sind einige Lösungen:
quelle
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
Merkmale von WCF
Quelle: Haupttextquelle
quelle
MSDN? Normalerweise kann ich mit der Bibliotheksreferenz selbst ziemlich gut umgehen, und ich erwarte normalerweise, dort wertvolle Artikel zu finden.
quelle
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.)
quelle
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.
quelle
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.
quelle
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.
quelle
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.)
quelle