Czy funkcja WCF podnosi poprzeczkę, czy tylko poziom złożoności? [Zamknięte]


84

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?


3
Jeśli szukasz dobrego klienta testowego dla usług WCF. Nie szukaj dalej niż msdn.microsoft.com/en-us/library/bb552364.aspx
Strelok,

Odpowiedzi:


61

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.


3
Świetne zasoby. Nie posunąłbym się nawet do stwierdzenia, że ​​rp walił w WCF lub autorów. Ja również poczułem się trochę przytłoczony, próbując spojrzeć na WCF po spędzeniu tak dużo czasu w ASMX. Wiem, że jest lepiej i chcę tego doświadczyć, ale ciężko jest znaleźć punkt wejścia tak, jak można by to zrobić z ASMX.
Chris Stewart,

15

Dzięki za linki. Po prostu ciekawy, czy wiesz, co się stało z Buddhike? Wydaje się, że zniknął z powierzchni ziemi. Nowy blog, o którym wspomina na blogs.thinktecture.com/buddhike (już nie istnieje). To tak, jakby został usunięty z tej śmiertelnej cewki. (Jakie sny mogą się pojawić?) Dzięki.
Jim Raden


14

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.


WCF ma być pojedynczą strukturą dla wszystkich tych protokołów. Wykonuje SOAP, REST, a dzięki zestawowi SDK adaptera WSCF wykonuje również te połączenia „starszego systemu”, wszystko w ramach modelu WCF.
Cheeso

3
To zależy od tego, jak mierzysz „produktywność”. Wolałbym, aby programiści zajęli 2-3 dni, aby to teraz omówić, ponieważ korzyści powiedzą za 6 miesięcy. WCF zastępuje nie tylko usługi sieciowe.
Christian Payne

1
Zgadzam się w 100%. Jeśli potrzebujesz tylko usług sieci Web i chcesz szybko wysyłać (kto nie?), Jego ASMX jest w sam raz, kochanie! WCF to gigantyczny młot kowalski - totalna przesada, jeśli chcesz tylko podstawowych usług internetowych. Tylko dlatego, że jest to nowa, błyszcząca rzecz, nie oznacza, że ​​powinieneś zakładać, że wszystko jest lepsze, we wszystkich scenariuszach, przez cały czas. I tylko dlatego, że WCF jest trudne do zrozumienia, nie czyni cię mądrym, jeśli chodzi o jego wybór. Więcej mocy dla tych, którzy mają odwagę odmówić przejścia na modę WCF!
saille

13

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.


6

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.


4

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.


AspNetCompatibilityRequirements jest złem koniecznym, jeśli wielu programistów zamierza przejść z ich usług ASMX, które obecnie działają dobrze.
Dave Ward

@dan, dlaczego nie AspNetCompatibilityRequirements ?
PreguntonCojoneroCabrón

@DaveWard AspNetCompatibilityRequirements to zło konieczne ?
PreguntonCojoneroCabrón

4

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


3

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.


2

Moje początkowe przemyślenia na temat WCF były dokładnie takie same! Oto kilka rozwiązań:

  1. Zaprogramuj swój własny serwer proxy / warstwę klienta z wykorzystaniem typów ogólnych (zobacz klasy ClientBase , Binding). Okazało się, że jest to łatwe do wykonania, ale trudne do udoskonalenia.
  2. Użyj implementacji 1 innej firmy ( moim ulubionym obecnie jest SoftwareIsHardwork )

2

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

  • Bezpieczna usługa przetwarzania transakcji biznesowych. Usługa, która
  • dostarcza innym aktualnych danych, takich jak komunikaty drogowe lub inne
  • usługa monitorowania. Usługa czatu, która pozwala na to dwóm osobom
  • komunikować się lub wymieniać dane w czasie rzeczywistym. Aplikacja na desce rozdzielczej
  • który sonduje jedną lub więcej usług pod kątem danych i przedstawia je w postaci logicznej
  • prezentacja. Udostępnianie przepływu pracy zaimplementowanego przy użyciu przepływu pracy systemu Windows
  • Fundacja jako usługa WCF. Aplikacja Silverlight do sondowania
  • obsługa najnowszych źródeł danych.

Funkcje WCF

  • Orientacja na usługi
  • Interoperacyjność
  • Wiele wzorców wiadomości
  • Metadane usługi
  • Umowy dotyczące danych
  • Bezpieczeństwo
  • Wiele transportów i kodowań
  • Niezawodne i kolejkowane wiadomości
  • Trwałe wiadomości
  • Transakcje
  • Wsparcie AJAX i REST
  • Rozciągliwość

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


Teraz użyj WCF lub REST? lub WebAPI? lub MicroService?
PreguntonCojoneroCabrón

1

MSDN? Zwykle całkiem nieźle sobie radzę z samym odniesieniem do Biblioteki i zwykle oczekuję, że znajdę tam wartościowe artykuły.


1

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ć).


Nie miałem problemu z wieloplatformowymi usługami ASMX - XML ​​radzi sobie tam całkiem nieźle. Rozumiem, że WCF = usługi zdalne + ASMX + MSMQ + WSE. Moja wołowina jest taka, że ​​stwardnienie rozsiane powinno używać trochę "progresywnego wzmocnienia", aby uczynić WCF bardziej przystępnym i moje pytanie brzmi: jak! Dzięki, rp
rp.

Współdziałanie ASMX było bardzo dobre, chociaż wysiłek wzrósł, gdy zaangażowano WS-Security.
Cheeso

1

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.


tak ... i jako podstawowa platforma komunikacyjna powinna zastąpić usługi sieciowe zorientowane na ASMX i ASP.NET. Nie?
Cheeso

1

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.


1

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.


1

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.)


Myślę, że ludzie są trochę chybiony, kiedy mówią, że WCF jest zamiennikiem dla zdalnego. Remoting jest nadal dobrą opcją, gdy chcesz wykonywać rzeczywiste wywołania oparte na obiektach .Net do .Net i mieć dużą kontrolę nad tym, jak wszystko jest ustawione na obu końcach. Z drugiej strony WCF jest ukierunkowane na publikowanie usług dla każdego, kto może korzystać z nich w dowolny sposób.
Tim Lovell-Smith

@Tim, Microsoft mówi teraz, że używaj WCF do wszystkiego i że jest to zamiennik dla Remotingu. Remoting wydaje się być zapomnianym dzieckiem świata .net.
Ian Ringrose
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.