Подтвердить что ты не робот

.NET AJAX звонит в ASMX или ASPX или ASHX?

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

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

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

4b9b3361

Ответ 1

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

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

Простой пример для получения сведений для "Person", предполагая, что Person является классом С#.

В 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 */
    }
  }
}

В DetailsPage.aspx

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

Используя такую ​​настройку, вам даже не понадобится помощь JQuery для вызова службы и возврата JS-версии вашего класса С# 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. Даже если вы решите не использовать его на этот раз, это довольно злая функция.

Ссылки

Ответ 2

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

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

Ответ 3

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

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

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