Rozumiem wartość trzyczęściowego modelu usługi / hosta / klienta oferowanego przez WCF. Ale czy to tylko ja, czy wydaje się, że WCF wzięło coś całkiem bezpośredniego i prostego (model ASMX) i zrobiło z tego bałagan?
Czy istnieje alternatywa dla cofnięcia się w czasie w wierszu poleceń SvcUtil w celu wygenerowania serwera proxy? Z usługami ASMX automatycznie dostarczana była wiązka testowa; czy jest dzisiaj dobra alternatywa dla WCF?
Doceniam, że rzeczy WS * są ściślej zintegrowane z WCF i mam nadzieję, że znajdę tam jakąś zapłatę dla WCF, ale cholera, w przeciwnym razie jestem zakłopotany.
Ponadto stan książek dostępnych dla WCF jest w najlepszym razie fatalny. Juval Lowy, znakomity autor, napisał dobry podręcznik O'Reilly "Programming WCF Services", ale nie robi to zbyt wiele (w każdym razie dla mnie), aby nauczyć się teraz używać WCF. Prekursorem tej książki (i trochę lepiej zorganizowanym, ale niewiele, jako samouczek) jest Learning WCF Michele Leroux Bustamante. Ma dobre miejsca, ale jest przestarzały, a odpowiadająca mu witryna internetowa zniknęła.
Czy masz dobre referencje do nauki WCF poza kontynuowaniem korzystania z Google bejebus?
źródło
Odpowiedzi:
Dobra, zaczynamy. Po pierwsze, książka Michele Leroux Bustamante została zaktualizowana do VS2008. Strona internetowa książki nie zniknęła. Jest teraz dostępny i zawiera mnóstwo świetnych informacji o WCF. Na tej stronie udostępnia zaktualizowany kod zgodny z VS2008 dla wszystkich przykładów w swojej książce. Jeśli zamówisz w Amazon, otrzymasz zaktualizowany przedruk.
WCF to nie tylko zamiennik ASMX. Jasne, że może (i robi całkiem nieźle) zastąpić ASMX, ale prawdziwą korzyścią jest to, że umożliwia samoobsługę usług. Większość funkcjonalności z GPW została dopieczona od samego początku. Struktura jest wysoce konfigurowalna, a możliwość obsługi wielu punktów końcowych przez wiele protokołów jest niesamowita, IMO.
Chociaż nadal można generować klasy proxy za pomocą opcji „Dodaj odwołanie do usługi”, nie jest to konieczne. Wszystko, co naprawdę musisz zrobić, to skopiować interfejs ServiceContract i poinformować kod, gdzie ma znaleźć punkt końcowy usługi, i to wszystko. Możesz wywoływać metody z usługi z bardzo małą ilością kodu. Korzystając z tej metody, masz pełną kontrolę nad wdrożeniem. Niezależnie od wybranej metody generowania klasy proxy, Michele pokazuje obie i wykorzystuje obie w swojej doskonałej serii webcastów na ten temat.
Michele ma mnóstwo świetnych materiałów i polecam sprawdzić jej strony internetowe. Oto kilka linków, które były dla mnie niezwykle pomocne, gdy uczyłem się WCF. Mam nadzieję, że zdasz sobie sprawę, jak silny jest WCF i jak łatwo go zaimplementować. Krzywa uczenia się jest nieco stroma, ale nagrody za zainwestowany czas są tego warte:
Zalecam obejrzenie przynajmniej 1 transmisji internetowych Michele. Jest bardzo skuteczną prezenterką i oczywiście ma niesamowitą wiedzę, jeśli chodzi o WCF. Wykonuje świetną robotę, demistyfikując wewnętrzne działanie WCF od podstaw.
źródło
Zwykle korzystam z Google, aby znaleźć odpowiedzi dotyczące WCF i często znajduję się na następujących blogach:
Blogi z cennymi artykułami WCF
Inne cenne artykuły, które znalazłem
źródło
Trudno mi zobaczyć, kiedy powinienem lub chciałbym użyć WCF. Czemu? Ponieważ na pierwszym miejscu stawiam produktywność i prostotę. Dlaczego model ASMX okazał się tak skuteczny, ponieważ zadziałał i szybko zaczął działać. A z VS 2005 i .NET 2.0 wsdl.exe wypluwał całkiem niezłe i zgodne usługi.
W prawdziwym życiu powinieneś mieć bardzo mało protokołów komunikacyjnych w swojej architekturze. Dzięki temu jest to proste i możliwe do utrzymania. Jeśli potrzebujesz dostępu do starszych systemów, napisz dla nich specjalne adaptery, aby mogły bawić się w ładnym, błyszczącym i pięknym świecie SOA.
źródło
WCF jest znacznie wydajniejszy niż ASMX i rozszerza go na kilka sposobów. ASMX jest ograniczony tylko do protokołu HTTP, podczas gdy WCF może używać kilku protokołów do komunikacji (przyznane, HTTP jest nadal sposobem, w jaki większość ludzi będzie go używać, przynajmniej w przypadku usług, które muszą być interoperacyjne). WCF jest również łatwiejsze do rozszerzenia. Przynajmniej można go rozszerzyć w taki sposób, że ASMX nie może zostać rozszerzony. „Łatwe” może być rozciąganiem. =)
Moim zdaniem dodana funkcjonalność oferowana przez WCF znacznie przewyższa złożoność, którą dodaje. Czuję też, że model programowania jest łatwiejszy. DataContracts są o wiele przyjemniejsze niż na przykład konieczność serializacji przy użyciu serializacji XML z publicznymi właściwościami wszystkiego. Ma też znacznie bardziej deklaratywny charakter, co też jest miłe.
źródło
Poczekaj ... czy kiedykolwiek korzystałeś z .NET Remoting, bo to właściwie zastępuje. .NET Remoting jest dość skomplikowany. Uważam, że WCF jest łatwiejsze i lepiej rozplanowane.
źródło
Nie widzę, żeby było wspominane wystarczająco często, ale nadal można implementować dość proste usługi za pomocą 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 swoim web.config, ale to nie jest takie złe.
Eliminacja szczegółowości oddzielnych kontraktów danych, usług i operacji znacznie ułatwia zarządzanie usługą WCF.
źródło
VS2008 zawiera element menu kontekstowego „Dodaj odwołanie do usługi”, który spowoduje utworzenie serwera proxy w tle.
Jak wspomniano wcześniej, WCF nie jest przeznaczony wyłącznie do zastąpienia typów usług sieci Web ASMX, ale ma zapewnić spójną, bezpieczną i skalowalną metodologię dla wszystkich usług interoperacyjnych, niezależnie od tego, czy jest to za pośrednictwem protokołu HTTP, tcp, nazwanych potoków czy transportów MSMQ.
Przyznam się, że mam inne problemy z WCF (np. Przepisywanie sygnatur metod przy wystawianiu usługi na basicHTTP - patrz tutaj , ale ogólnie myślę, że jest to zdecydowane ulepszenie
źródło
Jeśli używasz VS2008 i tworzysz projekt WCF, po trafieniu uruchom / debugowanie automatycznie uzyskasz testową wiązkę przewodów i możesz dodać odwołanie bez konieczności używania svcutil.
źródło
Moje początkowe przemyślenia na temat WCF były dokładnie takie same! Oto kilka rozwiązań:
źródło
WCF jest zamiennikiem wszystkich wcześniejszych technologii usług sieci Web firmy Microsoft. Robi też dużo więcej niż to, co tradycyjnie uważa się za „usługi sieciowe”.
„Usługi sieci Web” programu WCF są częścią znacznie szerszego spektrum komunikacji zdalnej włączonej za pośrednictwem usługi WCF. Uzyskasz znacznie wyższy stopień elastyczności i przenośności, wykonując czynności w programie WCF niż za pomocą tradycyjnego ASMX, ponieważ WCF jest zaprojektowany od podstaw w celu podsumowania wszystkich różnych infrastruktur programowania rozproszonego oferowanych przez firmę Microsoft. Punkt końcowy w programie WCF można komunikować równie łatwo za pośrednictwem protokołu SOAP / XML, jak za pośrednictwem protokołu TCP / binarnego, a zmiana tego medium jest po prostu modyfikacją pliku konfiguracyjnego. Teoretycznie zmniejsza to ilość nowego kodu potrzebnego podczas przenoszenia lub zmiany potrzeb biznesowych, celów itp.
ASMX is older than WCF, and anything ASMX can do so can WCF (and more)
. Zasadniczo możesz postrzegać WCF jako próbę logicznego zgrupowania razem wszystkich różnych sposobów komunikowania się dwóch aplikacji w świecie firmy Microsoft; ASMX był tylko jednym z tych wielu sposobów, dlatego jest teraz zgrupowany w ramach możliwości WCF.Dostęp do usług sieci Web można uzyskać tylko za pośrednictwem protokołu HTTP i działają one w środowisku bezstanowym, w którym usługa WCF jest elastyczna, ponieważ jej usługi mogą być hostowane w różnych typach aplikacji. Typowe scenariusze hostingu usług WCF to IIS, WAS, samodzielne hosting, zarządzana usługa systemu Windows.
Główna różnica polega na tym, że usługi sieci Web używają XmlSerializer. Ale WCF używa DataContractSerializer, który jest lepszy pod względem wydajności w porównaniu z XmlSerializer.
W jakich scenariuszach musi być używany WCF
Funkcje WCF
źródło: główne źródło tekstu
źródło
MSDN? Zwykle całkiem nieźle sobie radzę z samym odniesieniem do Biblioteki i zwykle oczekuję, że znajdę tam wartościowe artykuły.
źródło
Jeśli chodzi o to, co oferuje, myślę, że odpowiedzią jest kompatybilność. Usługi ASMX były całkiem Microsofty. Nie znaczy to, że nie starali się być kompatybilni z innymi konsumentami; ale model ten nie pasował zbytnio do stron internetowych ASP.NET i innych niestandardowych klientów firmy Microsoft. Natomiast WCF, ze względu na swoją architekturę, pozwala Twojej usłudze mieć punkty końcowe oparte na bardzo otwartym standardzie, np. REST, JSON itp., Oprócz zwykłego protokołu SOAP. Inne osoby prawdopodobnie będą znacznie łatwiej zużywać czas usługi WCF niż usługa ASMX.
(Wszystko to jest zasadniczo wywnioskowane z porównawczych odczytów MSDN, więc ktoś, kto wie więcej, może mnie poprawić).
źródło
Nie należy traktować programu WCF jako zamiennika ASMX. Sądząc po tym, jak jest umieszczony i jak jest używany wewnętrznie przez firmę Microsoft, jest to naprawdę podstawowy element architektury, który jest używany do wszelkiego rodzaju komunikacji transgranicznej.
źródło
Uważam, że WCF naprawdę przyspiesza implementację usług internetowych ASMX na wiele sposobów. Przede wszystkim zapewnia bardzo ładny warstwowy model obiektów, który pomaga ukryć wewnętrzną złożoność aplikacji rozproszonych. Po drugie, możesz mieć więcej niż tylko wzorce przesyłania komunikatów żądanie-powtórzenie, w tym asynchroniczne powiadomienia z serwera do klienta (niemożliwe w przypadku czystego HTTP), a po trzecie wyodrębnienie podstawowego protokołu transportowego z przesyłania komunikatów XML, a tym samym elegancka obsługa HTTP, HTTPS, TCP i innych. Dodatkowym atutem jest kompatybilność wsteczna z usługami sieciowymi „pierwszej generacji”. WCF używa standardu XML jako wewnętrznego formatu reprezentacji. Można to uznać za zalety lub wady, zwłaszcza w obliczu rosnącej popularności „beztłuszczowych alternatyw dla XML”, takich jak JSON.
źródło
Trudne rzeczy, które znajduję w przypadku WCF, to zarządzanie konfiguracjami klientów i serwerów oraz rozwiązywanie problemów z niezbyt ładnymi wyjątkami stanu błędu.
Byłoby wspaniale, gdyby ktoś miał na to jakieś skróty lub wskazówki.
źródło
Uważam, że to ból; w tym, że mam .NET na obu końcach, mam te same biblioteki DLL „kontraktu” załadowane na obu końcach itp. Ale potem muszę się bawić z wieloma szczegółami, takimi jak atrybuty „KnownType”.
Usługa WCF również domyślnie zezwala tylko 1 lub 2 klientom na łączenie się z usługą, dopóki nie zmienisz wielu konfiguracji. Zmiana konfiguracji z kodu nie jest łatwa, wysyłanie wielu plików comfig nie jest opcją, ponieważ zbyt trudno jest scalić nasze zmiany w jakiekolwiek zmiany, które klient mógł wprowadzić w czasie aktualizacji (również nie chcemy, aby klienci granie z ustawieniami WCF!)
Usługi zdalne .NET zwykle działały przez większość czasu.
Myślę, że udawanie, że komunikacja oparta na obiektach .NET i .NET jest tym samym, co wysyłanie bitu tekstu (xml) do nieznanego systemu, było o krok za daleko.
(Kilka razy używaliśmy WCF do rozmowy z systemem Java, stwierdziliśmy, że XSD, który wydał system java, i tak nie pasował do tego, czego chciał XML, więc musieliśmy ręcznie kodować wiele mapowań XML.)
źródło