Веб-сервис VS.Aspx Pages: за и против - PullRequest
5 голосов
/ 14 января 2011

Мы разрабатываем веб-приложение ASP.Net, которое размещается во внутренней сети.В настоящее время у нас есть несколько ASPX-страниц, которые обрабатывают веб-запросы со стороны клиента и взаимодействуют с нашими серверами.Мы начинаем разработку нашей следующей основной версии приложения и определяем архитектуру.

В чем различия между использованием страниц ASPX для обработки запросов http по сравнению с использованием полнофункциональной веб-службы (которая могла быскорее всего, Служба WCF)?

При изучении этой проблемы я наткнулся на несколько постов, которые были в меру полезны: здесь и здесь .Мое понимание некоторых ключевых различий заключается в следующем:

  1. Страницы ASPX ограничены в видах запросов, которые они могут получать.Они строго HTTP, тогда как служба WCF может иметь несколько конечных точек для обслуживания различных протоколов (HTTP, TCP и т. Д.).
  2. Службы WCF определены более конкретно благодаря ServiceContracts.Это означает, что если проект ссылается на сервис, они точно знают, чего ожидать в плане методов, использования и документации.Страница ASPX является более бесплатной для всех с точки зрения содержащихся методов и принятых запросов.

Однако, исходя из этих концепций, у меня возникают следующие проблемы:

  1. Возможность поддерживать различные протоколы - это отличная функция с точки зрения будущей проверки и совместимости, но какую реальную выгоду мы видим, если в настоящее время мы используем только , используя ее для взаимодействия через HTTP?
  2. InВ соответствии с моим предыдущим аргументом, если мы взаимодействуем только со службой через Интернет, действительно ли какие-либо из этих пунктов имеют какое-либо значение?Запрос http не заботится ни об одной из этих тонких деталей или договорных гарантиях, пока вызываемый им метод «просто работает».

Что-то мне не хватает?Есть ли какое-то ключевое преимущество использования сервиса?Лично я поддерживаю архитектуру веб-сервиса.Мне нравится идея иметь гибкую и четко определенную систему, которая может поддерживать будущее развитие.То, что я в основном ищу, чтобы выйти из этого, это способ пойти к коллеге и сказать: «Это должен быть сервис по причинам xyz, и мы могли бы увидеть улучшения abc для этого».

Ответы [ 5 ]

4 голосов
/ 14 января 2011

WCF (и более старые веб-службы на основе asmx) выполняют много задач по сериализации. Вы можете возвращать объекты из методов, и платформа будет сериализовывать эти объекты в правильный формат XML и предоставлять клиентам wsdl, чтобы они могли вызывать ваши методы веб-сервиса и понимать, что они получают.

Вы могли бы сделать это с помощью веб-страницы (могу поспорить, есть множество PHP-сервисов), но вам придется делать все это самостоятельно .

Тип запроса - WCF-магия. В WCF есть понятие «конечные точки», которые позволяют отделить метод вызова службы от того, что делает служба. Это просто лучшая (хотя и очень сложная) архитектура, которая лучше разделяет эти две проблемы.

Я сомневаюсь, что узким местом производительности любого веб-сервиса будет выбор использовать asmx, а не WCF. Снижение производительности в архитектуре веб-сервисов почти всегда связано с болтливыми интерфейсами и / или очень большими объектами / графами объектов. Тот факт, что вы делаете удаленный вызов веб-службы, в большинстве случаев делает разницу между скоростью WCF и asmx незначительной. WCF более гибок в дизайне, что является веской причиной для его выбора. WCF использует более новый DataContractSerializer, чем более старый метод, используемый в axms, и, предположительно, он немного быстрее. Я думаю, что вам придется масштабироваться до довольно большого количества пользователей, чтобы увидеть значимую разницу, хотя - вам лучше поискать болтливые интерфейсы и плохо выполнять запросы к БД.

Конечно, если есть сомнения - сначала измерьте, а затем нацеливайте на конкретные области с низкой производительностью.

3 голосов
/ 14 января 2011

Не следует использовать страницу ASPX в качестве импровизированной конечной точки службы, как это часто встречается в мире PHP. Запросы для страниц ASPX фильтруются через несколько HttpModules, которые не требуют дополнительных затрат для простых конечных точек службы, и каждый запрос создает экземпляр класса Page без всякой причины.

ASMX по-прежнему отличный вариант, если все, что вам нужно, это очень простая конечная точка, которая отвечает в XML или JSON.

WCF очень эффективен, если вам нужна большая гибкость и вы готовы справиться с бременем конфигурации.

Другим вариантом, который часто упускают из виду, является использование HttpHandler. Относительно просто / легко собрать ASHX HttpHandler, который дает вам очень «близкий к железу» доступ к запросу / ответу с гораздо меньшими издержками, чем страница ASPX.

2 голосов
/ 16 января 2011

Я мог бы неправильно понять вопрос, но я не уверен, что ваше сравнение здесь полностью верно. Вы сравниваете технологию доставки страниц и услуг с относительно высокими издержками (ASPX pages ) с технологиями только для обслуживания (WCF и ASMX), верно? Я думаю, что сравнение веб-сервисов ASMX и веб-сервисов WCF может быть более обоснованным, и в этом случае WCF выигрывает в конфигурации, не говоря уже о производительности: http://msdn.microsoft.com/en-us/library/bb310550.aspx

См. Также WCF против веб-методов ASPX против веб-методов ASMX , где можно найти соответствующий вопрос

0 голосов
/ 14 января 2011

Один из способов сделать это со страницами ASP.NET - это подход с использованием метода страниц: http://aspalliance.com/1922_PageMethods_In_ASPNET_AJAX.all,, который очень похож на маршрут веб-служб ASMX.Со всем сказанным я согласен, но вопрос в том, нужен ли вам специальный сервис для передачи данных во внешний мир, или эти сервисы предназначены только для потоковой передачи данных клиенту внутри приложения?

Я использовал подход с использованием метода страниц в своей ссылке, потому что большинство сервисов предназначались для облегчения работы AJAX на странице, и он сохранял весь код вместе.Кроме того, данные могут быть получены с помощью JQuery даже с помощью методов страницы, и он поддерживает сериализацию и генерацию прокси.

0 голосов
/ 14 января 2011

Веб-сервисы могут сериализовать ваши классы через прокси, вы не можете сделать это на странице aspx (AFAIK).

...