【发布时间】:2009-10-06 12:31:08
【问题描述】:
我在标有 webmethod 和 scriptmethod 标签的页面上有一个方法..
该方法将对象集合作为 JSON 数据返回给 jquery 函数,无需我手动序列化。
我现在正在尝试使用 HTTPHandler 重新创建相同的方法,并且想知道为什么我现在必须手动序列化数据。
是什么让网络方法与众不同?
【问题讨论】:
标签: asp.net asmx httphandler
我在标有 webmethod 和 scriptmethod 标签的页面上有一个方法..
该方法将对象集合作为 JSON 数据返回给 jquery 函数,无需我手动序列化。
我现在正在尝试使用 HTTPHandler 重新创建相同的方法,并且想知道为什么我现在必须手动序列化数据。
是什么让网络方法与众不同?
【问题讨论】:
标签: asp.net asmx httphandler
因为 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
【讨论】:
Web 方法为您提供 c# 类和 Js 文件之间的连接。如今,使用 Json 是获取 js 函数或 js 文件中任何位置的智能格式的返回消息的最佳方式。
问候
【讨论】:
对于较少的工作: 将您的方法移动到 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);
}
});
【讨论】: