WebMethod против ScriptMethod - PullRequest
43 голосов
/ 02 июня 2009

У меня есть место .NET 3.5 aspx с методом, помеченным атрибутом [WebMethod]. Я звоню с помощью JQuery, отправляя JSON в обоих направлениях. Это все прекрасно работает. Мой вопрос: что делает [ScriptMethod] применительно к методу? Я пробовал это, и, кажется, дает тот же результат. ScriptMethod и WebMethod идентичны и взаимозаменяемы, или один обеспечивает функциональность и / или накладные расходы, а другой нет? В общем, я путаюсь со всеми вариантами, доступными для реализации веб-сервисов, и мне хотелось бы знать, какие плюсы и минусы есть у каждого.

Ответы [ 2 ]

32 голосов
/ 11 февраля 2010

Атрибут ScriptMethod используется в следующих 2 сценариях.

  1. Вы используете jquery или любой другой механизм запроса ajax, но хотите, чтобы запрос был GET, а не POST.
  2. Вы хотите получить отформатированный ответ XML в javaScript.

Если у вас нет одного из вышеуказанных требований; вам просто нужен JSON-ответ с использованием ajax-запроса, тогда вы можете просто использовать WebMethod.

Здесь есть еще один запутанный элемент, когда вы используете атрибут ScriptService? это используется, если вы используете среду сценариев Microsoft Ajax Client, эти атрибуты сообщают серверу генерировать прокси-объекты на клиенте, чтобы вы могли вызывать функции так же, как обычный объект. var MyRemoteObject = new RemoteObject(); MyRemoteObject.getMessage(....) и даже когда вы используете атрибут ScriptService, вам не нужно добавлять атрибут ScriptMethod только в вышеуказанных сценариях.

Вначале меня это смущало, потому что я думал, что атрибуты ScriptService и ScriptMethod работают вместе, как атрибуты WebService и WebMethod.

2 голосов
/ 02 июня 2009

Атрибут ScriptMethodAttribute является необязательным. (Однако методы, которые можно вызывать из клиентского сценария, должны иметь атрибут System.Web.Services .. ::. WebMethodAttribute.). Если метод не помечен с помощью ScriptMethodAttribute, метод будет вызван с помощью команды HTTP POST, и ответ будет сериализован как JSON. Вы не можете переопределить этот параметр из скрипта.

от - http://msdn.microsoft.com/en-us/library/system.web.script.services.scriptmethodattribute.aspx

РЕДАКТИРОВАТЬ: WebMethod и ScriptMethod не являются конкурирующими атрибутами. ScriptMethod может быть дополнительной аннотацией, как сказано в предыдущем абзаце.

...