Помогите мне понять веб-методы?

У меня есть метод на странице, отмеченной тегами webmethod и scriptmethod.

Метод возвращает коллекцию объектов в функцию jquery в виде данных JSON без каких-либо проблем и без необходимости сериализовать их вручную.

Сейчас я пытаюсь воссоздать тот же метод, используя HTTPHandler, и мне было интересно, почему я должен теперь вручную сериализовать данные.

Что отличает веб-метод?


person Community    schedule 06.10.2009    source источник


Ответы (3)


Поскольку обработчик HTTP (своего рода) находится над стеком ASP WebForms, вы несете полную ответственность за работу и вывод обработчика.

Вы можете использовать (почти) все, что вы можете получить в рамках .NET framework, но наверняка HTTPHandler будет более трудоемким, чем готовое решение, предоставляемое ASP.NET.

Обработчик страницы ASP.NET — это только один тип обработчика. ASP.NET поставляется с несколькими другими встроенными обработчиками, такими как обработчик веб-службы для файлов .asmx.

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

См. http://msdn.microsoft.com/en-us/library/ms227675(VS.85).aspx

person Greg B    schedule 06.10.2009

Веб-метод обеспечивает связь между вашим классом С# и файлом Js. В настоящее время использование Json — лучший способ получить ответное сообщение в умном формате для функции js или в любом месте файла js.

С Уважением

person Bilgin Kılıç    schedule 06.10.2009

Для меньшей работы: переместите свой метод в ASMX (веб-службу): вы получите выгоду от встроенной сериализации, предоставляемой ScriptService:

namespace WS{

  [System.web.Script.Services.ScriptService()] 
  [System.Web.Services.WebService(Namespace:="http://tempuri.org/")]
  public class WebService1 : System.Web.Services.WebService
  {
      [WebMethod]  
      public Person GetDummyPerson()
      {
          Person p = new Person();
          p.Name = "John Wayne";
          p.Age = 20;
      }

      [WebMethod] 
      public IList GetPersonsByAge(int age)
      {
          //do actual data retrieval
          List result = new List();
          result.add(new Person());
          result.add(new Person());
          return result; 
      }
  }

  class Person 
  {
      String Name;
      int Age;
  }

}

На стороне клиента:

WS.GetDummyPerson(function(p){
    alert(p.Name + "-->" + p.Age);
});

WS.GetPersonsByAge(10,function(list){
   for(var i=0;i<list.length;i++)
   {
      document.write(list[i].Name + "==>" + list[i].Age);
   }
});
person jerjer    schedule 06.10.2009