Есть ли преимущество в использовании WCF для облегчения вызовов AJAX? - PullRequest
4 голосов
/ 27 ноября 2009

Я сейчас читаю предложение, в котором этот человек предлагает использовать сервисы WCF для облегчения вызовов AJAX в веб-приложении. Они говорят, что WCF может сериализовать данные более эффективно. Лично я никогда не думал о таком подходе. Мне всегда нравилось вызывать контроллеры MVC с использованием функциональных возможностей jQuery AJAX, и это никогда не было проблемой.

Теперь есть предложение использовать WCF для AJAX, и я немного скептически отношусь. Я хотел бы сохранить и открыть разум. Мне кажется, это добавляет еще один слой, что излишне усложняет вещи. Стоит ли это того?

Ответы [ 6 ]

3 голосов
/ 27 ноября 2009

В качестве примечания, ASP.Net MVC в настоящее время использует JavaScriptSerializer (даже если он помечен как устаревший пост .Net 3.5) для сериализации данных JSON, где WCF использует DataContractJsonSerializer.

Таким образом, с точки зрения эффективности сериализации JSON, MVC будет более эффективным, так как JavaScriptSerializer намного легче (все это быстро и грязно), чем DataContractJsonSerializer.

НТН

2 голосов
/ 27 ноября 2009

Я бы не стал беспокоиться о другом уровне, особенно не WCF, для облегчения вызовов AJAX. Если вы уже используете MVC, с JsonResult все будет в порядке (и, согласно Jason Fox выше, более эффективно).

Если вам не нужен веб-сервис для операций, для которых требуется веб-сервис (то есть взаимодействие через Интернет), зачем беспокоиться? Контроллер MVC всегда выполнял эту работу за меня без раздражающих накладных расходов.

2 голосов
/ 27 ноября 2009

+ 1 Я тоже немного скептически. Я не думаю, что средний читатель посылает большие объемы данных через Ajax / jQuery, и если они есть, я думаю, что им нужно немного реорганизовать.

Так что, если это так, то какой возможный выигрыш вы могли бы получить от использования WCF по сравнению с обычной функциональностью mvc при сериализации (может быть) 2 или 3 тыс. Данных. Я думаю, что даже 2k - это много для отправки через Ajax.

Было бы неплохо использовать WCF в коде позади, но для ajax-сериализации, не знаю об этом.

1 голос
/ 27 ноября 2009

Это звучит интересно в концепции, но в конце концов ты не вернешь Джонс? Может быть, я что-то упускаю, но как JSON, возвращаемый WCF, может быть более оптимизированным, чем Json, возвращаемый WCF? Это все равно что сказать, что мой XML более оптимизирован, чем ваш? Не то чтобы WCF мог возвращать двоичные данные в браузер - у вас не было бы возможности использовать эти данные ... (Или нет?) Я предполагаю, что сериализатор WCF мог бы быть быстрее, чем MVC, но узкое место всегда будет получать эти данные по сети.

Конечно, это все чисто предположения - нам нужно, чтобы вы прочитали предложение, чтобы дать точное мнение. И это очень сильно зависит от того, сколько данных вы отправляете через Ajax.

1 голос
/ 27 ноября 2009

Это того стоило бы, если вы предоставляете одни и те же сервисы через дополнительные конечные точки с разными привязками, но если вы просто используете AJAX, то я бы использовал контроллер MVC, который возвращает JsonResult. Вы все еще можете получить сериализацию параметров, используя фильтры действий.

Если нет специальных требуемых функций, которые обеспечивает только WCF, тогда контроллер MVC будет проще. Вам не придется беспокоиться о контрактах, привязках, конфигурации, форматировании JSON в WCF и т. Д.

0 голосов
/ 27 ноября 2009

WCF имеет свой собственный сериализатор, который (IIRC) является двоичным, и который обрабатывает графы объектов, что сериализация XML не может. У этого также не должно быть подробных издержек XML. Как отметил Григс, это, вероятно, чрезмерная проблема с оптимизацией.

WCF более эффективен, чем JSON? Не знаю, не уверен, что это так важно.

В кодировании будет тонкий слой службы и хостинг ASP.NET, что увеличивает накладные расходы. Влияет ли это на производительность - это отдельная проблема; это просто накладные расходы, которые видны, по сравнению с .asmx или накладными расходами контроллера MVC для обработки служб.

Я не думаю, что вы действительно получаете какие-либо другие возможности WCF в этом случае. Использование WCF для размещенных на ASP.NET веб-служб ограничивает вас конкретным протоколом привязки.

РЕДАКТИРОВАТЬ: Глядя на проект, где я использовал WCF для веб-сервисов, это веб-HttpBinding. Как отмечено в комментариях, это будет JSON. С другой стороны, если вы используете тег ASP.NET ScriptManager, он динамически создает прокси-сервер, который включает в себя синтаксический анализ данных, поэтому вы действительно никогда не узнаете о том, как данные сериализуются.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...