【问题标题】:Help me understand web methods?帮助我了解网络方法?
【发布时间】:2009-10-06 12:31:08
【问题描述】:

我在标有 webmethod 和 scriptmethod 标签的页面上有一个方法..

该方法将对象集合作为 JSON 数据返回给 jquery 函数,无需我手动序列化。

我现在正在尝试使用 HTTPHandler 重新创建相同的方法,并且想知道为什么我现在必须手动序列化数据。

是什么让网络方法与众不同?

【问题讨论】:

    标签: asp.net asmx httphandler


    【解决方案1】:

    因为 HTTP 处理程序(有点)位于 ASP WebForms 堆栈之上,所以您对处理程序的工作和输出负全部责任。

    您可以在 .NET 框架中使用(几乎)任何您可以使用的东西,但可以肯定的是,HTTPHandler 将比 ASP.NET 提供的现成解决方案更有效。

    ASP.NET 页面处理程序只有一个 处理程序的类型。 ASP.NET 自带 其他几个内置处理程序,例如 作为 .asmx 的 Web 服务处理程序 文件。

    您可以创建自定义 HTTP 处理程序 当你想要特殊处理时 您可以使用文件名识别 应用程序中的扩展

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

    【讨论】:

      【解决方案2】:

      Web 方法为您提供 c# 类和 Js 文件之间的连接。如今,使用 Json 是获取 js 函数或 js 文件中任何位置的智能格式的返回消息的最佳方式。

      问候

      【讨论】:

        【解决方案3】:

        对于较少的工作: 将您的方法移动到 ASMX(Web 服务): 您将受益于 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);
           }
        });
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-08-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-03-27
          相关资源
          最近更新 更多