WCF: WTF! Czy WCF podnosi poprzeczkę czy tylko poziom złożoności?

Rozumiem wartość trzyczęściowego modelu usług / host/klient oferowanego przez WCF. Ale czy to tylko ja, czy wydaje mi się, że WCF wziął coś dość bezpośredniego i prostego (model ASMX) i zrobił z tego bałagan?

Czy istnieje alternatywa dla korzystania z linii poleceń SvcUtil krok wstecz w czasie, aby wygenerować proxy? Z usług ASMX uprząż testowa została automatycznie dostarczona; czy istnieje dziś dobra alternatywa z WCF?

Doceniam to, że rzeczy WS* są bardziej ściśle zintegrowany z WCF i mam nadzieję znaleźć tam jakąś wypłatę za WCF, ale geeze, inaczej jestem zakłopotany.

Również stan książek dostępnych dla WCF jest w najlepszym razie fatalny. Juval Lowy, znakomity autor, napisał dobrą książkę O ' Reilly reference "Programowanie usług WCF", ale nie robi to zbyt wiele (dla mnie w każdym razie), aby nauczyć się teraz korzystać z WCF. Prekursorem tej książki (i trochę lepiej zorganizowanej, ale niewiele, jako tutorial) jest nauka Michele Leroux Bustamante. Ma dobre spoty, ale jest przestarzały na miejscu, a odpowiadająca mu strona internetowa zniknęła.

Czy masz dobre referencje do nauki WCF poza ciągłym Google bejebus z rzeczy?

Dzięki, rp

Author: rp., 2008-09-08

16 answers

Dobra, zaczynamy. Po pierwsze, książka Michele Leroux Bustamante została zaktualizowana do VS2008. Strona internetowa książki nie zniknęła. To jest teraz, i ma mnóstwo świetnych informacji WCF. Na tej stronie udostępnia zaktualizowany kod zgodny z VS2008 dla wszystkich przykładów w swojej książce. Jeśli zamówisz z Amazon, otrzymasz przedruk, który jest aktualizowany.

WCF nie jest Tylko zamiennikiem ASMX. Pewnie, że może (i robi całkiem dobrze) zastąpić ASMX, ale realną korzyścią jest to, że pozwala na samodzielne hostowanie Twoich usług. Większość funkcjonalności z GPW została upieczona od samego początku. Framework jest wysoce konfigurowalny, a możliwość obsługi wielu punktów końcowych przez wiele protokołów jest niesamowita, IMO.

Chociaż nadal możesz generować klasy proxy z opcji "Dodaj odniesienie do usługi", nie jest to konieczne. Wszystko, co naprawdę musisz zrobić, to skopiować interfejs ServiceContract i powiedzieć kodowi, gdzie znaleźć punkt końcowy dla usługi, i to wszystko. Możesz wywoływać metody z usługi z bardzo małym kodem. Korzystając z tej metody, masz pełną kontrolę nad implementacją. Niezależnie od metody, którą wybierzesz, aby wygenerować klasę proxy, Michele pokazuje oba i używa obu w swojej serii excellent webcastów na ten temat.

Michele ma mnóstwo świetnych materiałów i polecam sprawdzić jej stronę(y). Oto kilka linków, które były niezwykle pomocne dla mnie, gdy uczyłem się WCF. Mam nadzieję, że przekonasz się, jak silny jest WCF i jak łatwo go wdrożyć. Krzywa uczenia się jest trochę stroma, ale nagrody za zainwestowany czas są tego warte: {]}

Polecam obejrzeć co najmniej 1 z webcastów Michele. Jest bardzo skuteczna prezenterka, a ona oczywiście jest niesamowicie kompetentna jeśli chodzi o WCF. Wykonuje świetną robotę demystyfikując wewnętrzne funkcjonowanie WCF od podstaw.

 61
Author: Scott Anderson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-01-15 14:48:23
 15
Author: Chris Porter,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-12-10 22:53:00

Ciężko mi zobaczyć, kiedy powinienem lub chciałbym użyć WCF. Dlaczego? Ponieważ stawiam Produktywność i prostotę na szczycie mojej listy. Dlaczego model ASMX był tak udany, ponieważ działał, a ty szybko go dostajesz. Oraz z VS 2005 i. NET 2.0 wsdl.exe wypluwało całkiem ładne i zgodne serwisy.

W prawdziwym życiu powinieneś mieć bardzo mało protokołów komunikacyjnych w swojej architekturze. Dzięki temu jest prosty w utrzymaniu. Jeśli potrzebujesz dostępu do starszych systemów, napisz konkretne adaptery dla nich, dzięki czemu mogą grać w ładnym, błyszczącym i pięknym świecie SOA.

 14
Author: Saab,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-12-08 16:14:52

WCF jest znacznie potężniejszy niż ASMX i rozszerza go na kilka sposobów. ASMX jest ograniczony tylko do HTTP, podczas gdy WCF może używać kilku protokołów do swojej komunikacji (przyznany, HTTP jest nadal sposobem, w jaki większość ludzi będzie z niego korzystać, przynajmniej dla usług, które muszą być interoperacyjne). WCF jest również łatwiejsze do rozszerzenia. Przynajmniej możliwe jest rozszerzenie go w taki sposób, że ASMX nie może być rozszerzony. "Łatwe" może być rozciąganie. =)

Dodatkowa funkcjonalność oferowana przez WCF znacznie przewyższa złożoność dodaje, moim zdaniem. Uważam też, że model programowania jest łatwiejszy. Datacontracty są o wiele ładniejsze niż serializacja za pomocą serializacji XML z właściwościami publicznymi dla wszystkiego, na przykład. Ma również znacznie bardziej deklaratywny charakter, co jest również miłe.

 13
Author: Karl,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-26 10:29:06

Czekaj.... czy kiedykolwiek używałeś. NET Remoting, bo to jest prawdziwa rzecz, która go zastępuje. Remoting. NET sam w sobie jest dość skomplikowany. Uważam, że WCF jest łatwiejsze i lepiej rozplanowane.

 6
Author: Quibblesome,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-08 17:13:37

Nie widzę, aby wspominano o tym wystarczająco często, ale ty możesz nadal implementować dość proste usługi z WCF, bardzo podobne do usług ASMX. Na przykład:

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

}

Nadal musisz zarejestrować punkt końcowy w swojej sieci.config, ale nie jest tak źle.

Wyeliminowanie szczegółowości oddzielonych danych, usług i umów operacyjnych prowadzi do uczynienia WCF łatwiejszym do zarządzania dla mnie.

 4
Author: Dave Ward,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-08 16:53:10

VS2008 zawiera pozycję menu kontekstowego "Dodaj odniesienie do usługi", która utworzy dla Ciebie serwer proxy za kulisami.

Jak wspomniano wcześniej, WCF nie jest przeznaczony wyłącznie jako zamiennik dla typów usług internetowych ASMX, ale aby zapewnić spójną, bezpieczną i skalowalną metodologię dla wszystkich interoperacyjnych usług, niezależnie od tego, czy są to transporty HTTP, tcp, named pipes czy MSMQ.

Przyznam, że mam inne problemy z WCF (np. przepisywanie podpisów metod gdy odsłanianie usługi nad basicHTTP-zobacz tutaj , ale ogólnie uważam, że jest to zdecydowany imrovement

 4
Author: ZombieSheep,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 10:29:50

Jeśli używasz VS2008 i tworzysz projekt WCF, automatycznie otrzymasz uprząż testową po naciśnięciu run / debug i możesz dodać referencję bez konieczności używania svcutil.

 3
Author: blowdart,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-26 10:33:11

Moje początkowe myśli o WCF były dokładnie takie same! Oto kilka rozwiązań:

  1. Zaprogramuj własną warstwę proxy / client używając generics (zobacz klasy ClientBase, Wiązanie). Uważam, że to łatwe do pracy, ale trudne do doskonalenia.
  2. Użyj trzeciej implementacji 1 (SoftwareIsHardwork jest moim obecnym ulubionym)
 2
Author: NoizWaves,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-12-10 23:10:53

WCF {[3] } jest zamiennikiem wszystkich wcześniejszych technologii web service firmy Microsoft. Robi również o wiele więcej niż to, co tradycyjnie uważa się za "usługi internetowe".

WCF "Usługi internetowe" są częścią znacznie szerszego spektrum komunikacji zdalnej umożliwianej przez WCF. Uzyskasz znacznie wyższy stopień elastyczności i przenośności podczas robienia rzeczy w WCF niż dzięki tradycyjnemu ASMX, ponieważ WCF został zaprojektowany od podstaw, aby podsumować wszystkie różne rozproszone infrastruktury programistyczne oferowane przez Microsoft. Punkt końcowy w WCF może być komunikowany równie łatwo przez SOAP / XML, jak przez TCP / binary i aby zmienić ten nośnik, wystarczy plik konfiguracyjny mod. Teoretycznie zmniejsza to ilość nowego kodu potrzebnego przy przenoszeniu lub zmianie potrzeb biznesowych, celów itp.

ASMX is older than WCF, and anything ASMX can do so can WCF (and more). Zasadniczo można zobaczyć WCF jako próby logicznego grupowania wszystkich różnych sposobów uzyskania dwóch aplikacji do komunikacji w świecie Microsoftu; ASMX był tylko jednym z tych wielu sposobów i tak jest teraz zgrupowane pod parasolem WCF możliwości.

Web Services mogą być dostępne tylko przez HTTP i działa w środowisku bezstanowym, gdzie WCF jest elastyczny, ponieważ jego usługi mogą być hostowane w różnych typach aplikacji. Typowe scenariusze hostingu usług WCF to IIS, WAS, Self-hosting, zarządzana usługa Windows.

Główną różnicą jest to, że Usługi internetowe używają XmlSerializer. Ale WCF używa DataContractSerializer, który jest lepsza wydajność w porównaniu do XmlSerializer.

W jakich scenariuszach należy stosować WCF

  • bezpieczna usługa do przetwarzania transakcji biznesowych. Serwis, który
  • [20]} dostarcza bieżące dane innym, takim jak raport o ruchu drogowym lub inne
  • Usługa monitoringu. Usługa czatu, która pozwala dwóm osobom na
  • komunikować się lub wymieniać dane w czasie rzeczywistym. A dashboard application
  • , który bada jedną lub więcej usług dla danych i przedstawia je w logiczne
  • prezentacja. W systemie Windows Workflow nie ma żadnych ograniczeń co do wydajności.]} Fundacja jako usługa WCF. Aplikacja Silverlight do ankiety a
  • usługa dla najnowszych kanałów danych.

Cechy WCF

  • Orientacja Usługi
  • interoperacyjność
  • Wiele Wzorców Wiadomości
  • Metadane Usługi
  • Umowy Na Dane
  • bezpieczeństwo
  • wiele transportów i Kodowanie
  • wiarygodne i kolejkowane wiadomości
  • Trwałe Wiadomości
  • transakcje
  • obsługa AJAX i REST
  • rozciągliwość

Źródło: główne źródło tekstu

 2
Author: Babak.Abad,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-05-05 21:25:30

MSDN? Zazwyczaj radzę sobie całkiem dobrze z samym odniesieniem do biblioteki i zwykle oczekuję, że znajdę tam cenne artykuły.

 1
Author: Ben Collins,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-08 16:45:47

Jeśli chodzi o to, co oferuje, myślę, że odpowiedzią jest kompatybilność. Usługi ASMX były dość Microsofty. Nie mówiąc o tym, że nie starały się być kompatybilne z innymi konsumentami; ale model nie został stworzony, aby pasował zbytnio poza ASP.NET stron internetowych i innych niestandardowych konsumentów Microsoft. Podczas gdy WCF, ze względu na swoją architekturę, pozwala Twojej usłudze mieć bardzo otwarte punkty końcowe oparte na standardach, np. REST, JSON itp. oprócz zwykłego mydła. Inni ludzie prawdopodobnie będą mieli znacznie łatwiejsze czasochłonne usługi WCF niż ASMX one.

(to wszystko jest w zasadzie wywnioskowane z porównawczego czytania MSDN, więc ktoś, kto wie więcej powinien czuć się swobodnie, aby mnie poprawić.)

 1
Author: Domenic,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-08 17:11:03

WCF nie powinien być uważany za zamiennik ASMX. Sądząc po tym, jak jest on pozycjonowany i jak jest używany wewnętrznie przez Microsoft, jest to naprawdę podstawowy element architektury, który jest używany do wszelkiego rodzaju komunikacji transgranicznej.

 1
Author: Kwal,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-12-08 19:52:13

Wierzę, że WCF naprawdę rozwija implementację ASMX web services na wiele sposobów. Przede wszystkim zapewnia bardzo ładny, warstwowy model obiektowy, który pomaga ukryć wewnętrzną złożoność rozproszonych aplikacji. Po drugie możesz mieć więcej niż wzorce przesyłania wiadomości typu request-replay, w tym asynchroniczne powiadomienia z serwera do klienta (niemożliwe przy czystym HTTP), a po trzecie wyodrębnianie bazowego protokołu transportowego z wiadomości XML, a tym samym eleganckie wsparcie HTTP, HTTPS, TCP i inne. Plusem jest również kompatybilność wsteczna z usługami sieciowymi "1-st generation". WCF używa standardu XML jako wewnętrznego formatu reprezentacji. Może to być postrzegane jako zaleta lub wada, zwłaszcza przy rosnącej popularności "beztłuszczowych alternatyw dla XML", takich jak JSON.

 1
Author: pglowack,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-12-08 20:13:12

Trudne rzeczy, które znajduję w WCF, to zarządzanie konfiguracjami dla klientów i serwerów oraz rozwiązywanie niezbyt przyjemnych błędów stanu.

Byłoby świetnie, gdyby ktoś miał jakieś skróty lub wskazówki do nich.

 1
Author: StingyJack,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-12-31 20:16:11

Uważam, że jest to ból; w tym, że mam. net na obu końcach, mam te same "kontrakt" biblioteki DLL załadowane na obu końcach itp. Ale potem muszę zadzierać z wieloma szczegółami, takimi jak atrybuty "KnownType".

WCF domyślnie pozwala tylko 1 lub 2 klientom połączyć się z usługą, dopóki nie zmienisz wielu konfiguracji. Zmiana konfiguracji z kodu nie jest łatwa, wysyłka wielu plików comfig nie jest opcją, ponieważ zbyt trudno jest połączyć nasze zmiany z dowolnymi zmianami, które klient mógł wprowadzić w czas aktualizacji (również nie chcemy, aby klienci bawili się ustawieniami WCF!)

. NET remoting zwykle działa przez większość czasu.

Myślę, że próbaudawania , że komunikacja oparta na obiektach.net na. Net jest taka sama, jak wysyłanie bitów tekstu (xml) do nieznanego systemu, była o krok za daleko.

(kilka razy użyliśmy WCF do rozmowy z systemem Java, okazało się, że XSD, które System java wydał nie pasował do XML chciał i tak, więc musiał ręcznie koduje wiele mapowań XML.)

 1
Author: Ian Ringrose,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-03-28 14:27:18