2011-01-14 13 views
5

Tworzymy aplikację internetową ASP.Net, która jest hostowana w sieci wewnętrznej. Obecnie mamy kilka stron ASPX, które obsługują żądania sieciowe od strony klienta i współdziałają z naszymi serwerami. Rozpoczynamy prace nad kolejną główną wersją aplikacji i decydujemy o architekturze.Web Service VS. Strony Aspx: Wady i zalety

Jakie są różnice między używaniem stron ASPX do obsługi żądań HTTP w porównaniu do korzystania z pełnowartościowego serwisu WWW (który najprawdopodobniej byłby usługą WCF)?

Podczas badania tego problemu natknąłem się na kilka powiązanych ze sobą postów, które były umiarkowanie pomocne, można je zobaczyć pod numerami here i here. Moje rozumienie niektórych kluczowych różnic jest następujące:

  1. Strony ASPX są ograniczone pod względem rodzajów żądań, które mogą otrzymać. Są to ściśle HTTP, podczas gdy usługa WCF może mieć wiele punktów końcowych do obsługi różnych protokołów (HTTP, TCP, itp.).
  2. Usługi WCF są konkretniej zdefiniowane dzięki ServiceContracts. Oznacza to, że jeśli projekt odwołuje się do usługi, wie dokładnie, czego się spodziewać w zakresie metod, użycia i dokumentacji. Strona ASPX jest bardziej bezpłatna dla wszystkich pod względem zawartych w niej metod i zaakceptowanych żądań.

Jednak na podstawie tych pojęć, moje problemy są następujące:

  1. Możliwość obsługiwać różne protokoły to wspaniała cecha z punktu widzenia przyszłej korekty i zgodności, ale to, co realne korzyści są widzimy jeśli obecnie używamy do interakcji przez HTTP?
  2. Zgodnie z moim poprzednim argumentem, jeśli tylko wchodzimy w interakcję z usługą w sieci, czy któryś z tych punktów rzeczywiście ma znaczenie? Żądanie http nie dba o żadne z tych drobniejszych szczegółów ani gwarancje kontraktowe, o ile metoda, którą nazywa "po prostu działa".

Czy jest coś, czego mi brakuje? Jakieś kluczowe korzyści z korzystania z usługi? Osobiście wspieram architekturę Web Service. Podoba mi się pomysł posiadania elastycznego i dobrze zdefiniowanego systemu, który może wspierać przyszły rozwój. To, co zasadniczo zamierzam wydostać z tego, to sposób na to, aby udać się do współpracownika i powiedzieć "Powinno to być usługa dla powodów x y z, a mogliśmy zobaczyć ulepszenia b c do tego".

Odpowiedz

4

WCF (i starsze serwisy internetowe oparte na technologii asmx) wykonują wiele zadań związanych z serializacją. Możesz zwracać obiekty z metod, a struktura serializuje te obiekty do poprawnego formatu XML i zapewnia klientowi kod WSDL, aby mogli oni wywoływać metody usługi sieci Web i rozumieć, co otrzymują.

Ty mógłby to zrobić ze strony internetowej (założę istnieje mnóstwo PHP „Usługi internetowe” tam), ale trzeba zrobić wszystko, sanitarny siebie.

Typ przedmiotu zapytania to magia WCF. WCF ma pojęcie "punktów końcowych", które pozwalają oddzielić metodę wywoływania usługi od tego, co robi usługa. To po prostu lepsza (choć bardzo skomplikowana) architektura, która lepiej oddziela te dwie kwestie.

Wątpię, aby wąskim gardłem wydajności każdej usługi internetowej był wybór używania ASMX zamiast WCF. Kary za wydajność w architekturze usług sieciowych są prawie zawsze spowodowane interfejsami chatty i/lub bardzo dużymi wykresami obiektów/obiektów. Sam fakt, że wykonujesz zdalne wywołanie do usługi sieciowej, sprawia, że ​​różnica w szybkości WCF vs. asmx jest nieistotna w większości przypadków. WCF jest bardziej elastyczny w projektowaniu, co jest ważnym powodem do wyboru. WCF używa raczej nowszej wersji niż standardowa metoda używana w aksach i podobno jest nieco szybsza. Sądzę, że musiałbyś skalować do znacznej liczby użytkowników, aby zobaczyć znaczącą różnicę - lepiej byłoby najpierw szukać czatowych interfejsów i słabych wyników zapytań db.

Oczywiście, jeśli masz wątpliwości - zmierz najpierw, a następnie celuj w określone obszary o słabej wydajności.

+0

Ów prawdziwy. Metody serializacji WCF mają działać szybciej niż usługa sieciowa ASMX, prawda? – yourbuddypal

+0

Meh. Być może trochę, ale wątpię, aby wąskie gardło wydajności każdej usługi internetowej było wyborem użycia raczej ASMX niż WCF. Kary za wydajność w architekturze usług sieciowych są prawie zawsze spowodowane interfejsami chatty i/lub bardzo dużymi wykresami obiektów/obiektów. Sam fakt, że wykonujesz zdalne wywołanie do usługi sieciowej, sprawia, że ​​różnica w szybkości WCF vs. asmx jest nieistotna w większości przypadków. WCF jest bardziej elastyczny w projektowaniu, co jest ważnym powodem do wyboru. –

+0

Re: serializery, funkcja DataContractJsonSerializer WCF jest w rzeczywistości mniej elastyczna niż domyślny moduł JavaScriptSerializer ASMX. JSS będzie akceptować daty i wyliczenia jako łańcuchy, ale DCJS nie będzie.To szczególnie żmudne/kłopotliwe, jeśli chodzi o daty. –

0

Webservices może serializować klasy za pośrednictwem serwerów proxy, nie można tego zrobić na stronie aspx (AFAIK).

0

Jednym ze sposobów robienia tego ze stronami ASP.NET jest metoda pagemethods: http://aspalliance.com/1922_PageMethods_In_ASPNET_AJAX.all, która jest bardzo podobna do trasy usług internetowych ASMX. Wszystko, co zostało powiedziane, zgadzam się z, ale pytanie brzmi, czy potrzebujesz dedykowanej usługi do dostarczania danych do świata zewnętrznego, czy te usługi służą tylko do przesyłania danych strumieniowych do klienta wewnątrz aplikacji?

Podjęłam metodę metody strony w moim linku, ponieważ większość usług miała ułatwić AJAX na stronie i zachowała kod razem. Ponadto dane można pobierać za pośrednictwem JQuery nawet przy użyciu metod stronicowania i obsługuje serializację i generowanie proxy.

3

Nie powinieneś używać strony ASPX jako improwizowanego punktu końcowego usługi, jak to często widuje się w świecie PHP. Żądania stron ASPX są filtrowane za pomocą kilku HttpModules, które są niepotrzebne narzutów dla prostych punktów końcowych usługi, a każde żądanie tworzy wystąpienie klasy Page bez żadnego powodu.

ASMX jest nadal świetną opcją, jeśli potrzebujesz tylko bardzo prostego punktu końcowego, który odpowiada w XML lub JSON.

WCF jest bardzo wydajny, jeśli potrzebujesz większej elastyczności i jesteś gotów poradzić sobie z obciążeniem konfiguracyjnym.

Inną często pomijaną opcją jest użycie HttpHandler. Jest to stosunkowo proste/łatwe do zrzucenia ASHX HttpHandler, który daje bardzo "bliski metalowi" dostęp do żądania/odpowiedzi przy znacznie mniejszym obciążeniu niż strona ASPX.

2

Mogłabym być nieporozumieniem z tym pytaniem, ale nie jestem pewien, czy twoje porównanie jest tutaj całkowicie poprawne. Porównujesz technologię dostarczania strony i usługi ze stosunkowo wysokim narzutem (ASPX stron) za pomocą czysto usługowych technologii (WCF i ASMX), prawda? Myślę, że porównanie ASMX usług internetowych w porównaniu WCF usług internetowych mogą być bardziej aktualne, w którym to przypadku WCF wygrywa dłoń na konfigurowalność, nie wspominając o wydajności: http://msdn.microsoft.com/en-us/library/bb310550.aspx

zobaczyć również WCF vs ASPX webmethods vs ASMX webmethods dla powiązanego pytanie