none
asp.net的页面处理:asmx和ashx的各自优缺点是什么? RRS feed

  • 问题

  • 客户端使用jquery发送ajax请求,数据格式是json。
    如果采用ashx处理请求:将请求的数据从数据库取出,linq处理成对象,然后需要自己写代码来将数据转化成json格式,最后通过response.write将数据传回。
    如果采用asmx处理请求:将请求的数据用webservices封装,然后在webservices处理页面(asmx)中写函数,并声明其Attributes为[webmethod]便于调用者访问,由于请求时的jquery头中type:json,所以webservices会自动将数据处理为json格式通过webmethod返回值返回,少了自己写序列化的麻烦。
    这两者的数据传输都十分干净,但都会在客户端造成一些Dom入侵。
    我大概了解这么多。
    我想知道的是这两者在实际网站项目开发中,有什么不同,优缺点是什么?我之前的页面用了ashx做处理,asmx还没在当前的项目中用过。
    2009年5月22日 11:17

答案

  • 你好,

    asmx是webservice的文件后缀名,个人理解webservice就是用来传输数据的,其原理主要是利用XML,soap协议等。

    ashx 文件用于写web handler的。其实就是带HTML和C#的混合文件。当然你完全可以用.aspx 的文件后缀。使用.ashx 可以让你专注于编程而不用管相关的WEB技术。.ashx必须包含IsReusable.
    public class AverageHandler : IHttpHandler 
    { 
    public bool IsReusable 
    { get { return true; } } 
    public void ProcessRequest(HttpContext ctx) 
    { 
    ctx.Response.Write("hello"); 
    } 
    } 
    

    Microsoft Online Community Support
    2009年5月27日 8:53
  • ashx是要实现IHttpHandler的,用于处理web请求,而Page实际上也是实现了IHttpHandler的
    只不过Page中封装了很多方法以及一些常用的属性还有事件这些等
    ashx可以方便的添加html等代码
    如果是直接web.config中配置HttpHandler的话那样的类的结果一般都是通过ResponseWrite实现的,这样比较麻烦,不如ashx实现起来更方便

    WebService 可以实现跨平台的支持,用xml或者soap等来传输数据,传输的数据量比ashx要多。
    我个人是这样理解的哈 
    努力着就不会放弃!http://hi.baidu.com/1987raymond
    2009年5月27日 9:11
    版主
  • 客户端使用jquery发送ajax请求,数据格式是json。
    如果采用ashx处理请求:将请求的数据从数据库取出,linq处理成对象,然后需要自己写代码来将数据转化成json格式,最后通过response.write将数据传回。
    如果采用asmx处理请求:将请求的数据用webservices封装,然后在webservices处理页面(asmx)中写函数,并声明其Attributes为[webmethod]便于调用者访问,由于请求时的jquery头中type:json,所以webservices会自动将数据处理为json格式通过webmethod返回值返回,少了自己写序列化的麻烦。
    这两者的数据传输都十分干净,但都会在客户端造成一些Dom入侵。
    我大概了解这么多。
    我想知道的是这两者在实际网站项目开发中,有什么不同,优缺点是什么?我之前的页面用了ashx做处理,asmx还没在当前的项目中用过。

    lz   虽然两者都能达成json访问的功能

    但是也有很多不同  

    ashx 的测试性很差 没有办法想测试函数一样根据输入输出简单的编写单元测试或者跟踪调试   ---〉ws的封装非常好
    ws 的序列化除非你自己来重写序列化组建  否则很难干预   --> ashx 很灵活 可以随意转换输出内容,要输出图片就是图片  要输出json就是json,要redirect就redirect
    ashx 的代码结构很混乱 很难在一个大规模的开发环境下进行协同开发 ---〉ws 就按照一般写雷库的方式写写注释就好了

    紫柔版主的头像真叫萌得一个不行啊。。。。
    2009年5月28日 2:51

全部回复

  • 你好,

    asmx是webservice的文件后缀名,个人理解webservice就是用来传输数据的,其原理主要是利用XML,soap协议等。

    ashx 文件用于写web handler的。其实就是带HTML和C#的混合文件。当然你完全可以用.aspx 的文件后缀。使用.ashx 可以让你专注于编程而不用管相关的WEB技术。.ashx必须包含IsReusable.
    public class AverageHandler : IHttpHandler 
    { 
    public bool IsReusable 
    { get { return true; } } 
    public void ProcessRequest(HttpContext ctx) 
    { 
    ctx.Response.Write("hello"); 
    } 
    } 
    

    Microsoft Online Community Support
    2009年5月27日 8:53
  • 从传输的数据量上来说,显然是web 服务的数据量会大一些。因为soap要遵守soap dtd的定义。web服务的返回中必然会包含元数据的定义。
    然而,对于ashx你可以做到非常精细的控制。
    2009年5月27日 9:04
  • ashx是要实现IHttpHandler的,用于处理web请求,而Page实际上也是实现了IHttpHandler的
    只不过Page中封装了很多方法以及一些常用的属性还有事件这些等
    ashx可以方便的添加html等代码
    如果是直接web.config中配置HttpHandler的话那样的类的结果一般都是通过ResponseWrite实现的,这样比较麻烦,不如ashx实现起来更方便

    WebService 可以实现跨平台的支持,用xml或者soap等来传输数据,传输的数据量比ashx要多。
    我个人是这样理解的哈 
    努力着就不会放弃!http://hi.baidu.com/1987raymond
    2009年5月27日 9:11
    版主
  • 从传输的数据量上来说,显然是web 服务的数据量会大一些。因为soap要遵守soap dtd的定义。web服务的返回中必然会包含元数据的定义。
    然而,对于ashx你可以做到非常精细的控制。


    ashx是要实现IHttpHandler的,用于处理web请求,而Page实际上也是实现了IHttpHandler的
    只不过Page中封装了很多方法以及一些常用的属性还有事件这些等
    ashx可以方便的添加html等代码
    如果是直接web.config中配置HttpHandler的话那样的类的结果一般都是通过ResponseWrite实现的,这样比较麻烦,不如ashx实现起来更方便

    WebService 可以实现跨平台的支持,用xml或者soap等来传输数据,传输的数据量比ashx要多。
    我个人是这样理解的哈 
    努力着就不会放弃!http://hi.baidu.com/1987raymond


    你们没看到 lz用的ws是json 的声明而没有用soap么???
    紫柔版主的头像真叫萌得一个不行啊。。。。
    2009年5月28日 2:45
  • 客户端使用jquery发送ajax请求,数据格式是json。
    如果采用ashx处理请求:将请求的数据从数据库取出,linq处理成对象,然后需要自己写代码来将数据转化成json格式,最后通过response.write将数据传回。
    如果采用asmx处理请求:将请求的数据用webservices封装,然后在webservices处理页面(asmx)中写函数,并声明其Attributes为[webmethod]便于调用者访问,由于请求时的jquery头中type:json,所以webservices会自动将数据处理为json格式通过webmethod返回值返回,少了自己写序列化的麻烦。
    这两者的数据传输都十分干净,但都会在客户端造成一些Dom入侵。
    我大概了解这么多。
    我想知道的是这两者在实际网站项目开发中,有什么不同,优缺点是什么?我之前的页面用了ashx做处理,asmx还没在当前的项目中用过。

    lz   虽然两者都能达成json访问的功能

    但是也有很多不同  

    ashx 的测试性很差 没有办法想测试函数一样根据输入输出简单的编写单元测试或者跟踪调试   ---〉ws的封装非常好
    ws 的序列化除非你自己来重写序列化组建  否则很难干预   --> ashx 很灵活 可以随意转换输出内容,要输出图片就是图片  要输出json就是json,要redirect就redirect
    ashx 的代码结构很混乱 很难在一个大规模的开发环境下进行协同开发 ---〉ws 就按照一般写雷库的方式写写注释就好了

    紫柔版主的头像真叫萌得一个不行啊。。。。
    2009年5月28日 2:51