.NET AJAX Звонки в ASMX или ASPX или ASHX? - PullRequest
37 голосов
/ 23 марта 2009

Каков наиболее эффективный способ вызова бизнес-логики из javascript на стороне клиента с использованием AJAX? Похоже, вы можете вызвать [WebMethod] на aspx напрямую из javascript (в моем случае я использую JQuery, чтобы помочь) ИЛИ вы можете вызвать .asmx напрямую Какой звонок требует меньше накладных расходов? Какова лучшая практика?

Кроме того, что атрибут [ScriptService] делает в классе? Я никогда не использовал это раньше в моих методах .aspx [WebMethod], и все, кажется, работает нормально.

Надеюсь, это чисто объективный вопрос. Заранее спасибо!

Ответы [ 3 ]

30 голосов
/ 24 марта 2009

ScriptService, по моему мнению, является скрытой жемчужиной в asp.net. Вызовы в службу сценариев не передают данные формы + viewstate, они представляют собой скудную и быструю полезную нагрузку JSON.

Здесь самое интересное, менеджер сценариев ASP.NET3.5 может выполнить за вас большую часть работы по созданию метода JS для вызова и настройке любых необходимых классов JS.

Простой пример извлечения подробностей для «Человека», предполагая, что Person - это класс C #.

В PersonService.asmx:

namespace MyProj.Services {
  [System.Web.Script.Services.ScriptService]
  [System.Web.Script.Services.GenerateScriptType(typeof(Person))] 
  public class PersonService : System.Web.Services.WebService
  {
    [WebMethod, ScriptMethod(UseHttpGet = true, ResponseFormat = ResponseFormat.Json)]
    public Person GetPersonDetails(int id)
    { 
       /* return Logic here */
    }
  }
}

In DetailsPage.aspx

<asp:ScriptManager ID="ScriptManager1" runat="server">
 <Services>
  <asp:ServiceReference Path="~/Services/PersonService.asmx" />
 </Services>
</asp:ScriptManager>

Используя такую ​​настройку, вам даже не понадобится помощь JQuery для вызова службы и возврата JS-версии вашего класса C # Person, .net сделает все за вас. Пример использования этого сервиса от JS:

MyProj.Services.PersonService.GetPersonDetails(id, _onDetailsCallbackSuccess, _requestFailed, null);

_onDetailsCallbackSuccess: function(result, userContext, methodName) {
 //all persons properties are now intact and available
 document.getElementById('txtFirstname').value = result.Firtname;
}

В любом случае, было бы более чем полезно изучить материал ASP.NET Ajax ScriptService. Даже если вы решите не использовать его на этот раз, это довольно злая функция.

Ссылки

16 голосов
/ 23 марта 2009

Если все, что вас беспокоит, это издержки на стороне сервера, то отправка простого GET со строкой запроса в ASHX, вероятно, была бы такой. Это определенно предпочтительнее .ASPX, который проходит жизненный цикл страницы, который вам не нужен.

Преимущество веб-метода ASMX заключается в том, что он основан на стандарте, который можно легко вызывать с помощью других технологий (поддерживает обнаружение). Однако с некоторой документацией ваш .ASHX будет так же просто вызвать.

13 голосов
/ 24 марта 2009

Как вы сформулировали свой вопрос, я полагаю, что вы рассматриваете разницу между ASMX "ScriptService", ASHX HttpHandler и ASP.NET AJAX "PageMethod" (не фактическая страница ASPX).

Если это так, все они очень похожи. ASP.NET AJAX PageMethods для всех намерений и целей идентичны ASMX ScriptServices. Они не создают экземпляр страницы, поэтому они не несут накладных расходов, обычно связанных с ASPX-страницами.

Если вы не говорите о насыщении сервера запросами, вы, вероятно, обнаружите, что все три работают сравнимо.

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