转载地址:http://blog.csdn.net/wanda39kela/article/details/46118839
.NET里面webform的后缀是aspx
WCF和WebService的后缀是asmx
然后今天拿到一个客户端代码,调用服务端,服务端后缀是ashx瞬间傻蛋了,.NET我不知道的组件真多。
四个疑问:
1、什么时候用
2、优缺点
3、简单实现机制
4、简单DEMO
1、什么时候用
虽然通过标准的方式可以创建处理程序,但是实现的步骤比较复杂,为了方便网站开发中对处理程序的应用,从Asp.NET 2.0开始,asp.net提供了称为一般处理程序的处理程序,允许我们使用比较简单的方式定义扩展名为ashx的专用处理程序。
对于asp.Net网站来说,网站最觉的处理结果就是HTML网页,生成网页的工作通常使用扩展名为aspx的Web窗体来完成。对于处理结果不是HTML的请求,都可以通过一般处理程序完成。例如生成RSS Feed、XML、图片等。
一般处理程序是asp.net网站中最为简单、高效的处理程序,在处理返回类型不是HTML的请求中有着重要的作用。
不知道我的理解正不正确,那感觉asmx适合作为C/S的服务器端来使用。
2、优缺点
通常是实现IHttpHandler接口,因为不必继承自Page类,所以没有那么多事件需要处理,不必消耗太多资源,所以性能方面要比aspx高
3、简单实现机制
.ashx 文件用于写web handler的。.ashx文件与.aspx文件类似,可以通过它来调用HttpHandler类,它免去了普通.aspx页面的控件解析以及页面处理的过程。其实就是带HTML和C#的混合文件。
.ashx文件适合产生供浏览器处理的、不需要回发处理的数据格式,例如用于生成动态图片、动态文本等内容。
4、简单DEMO
在VS2013下,右键项目-->添加-->一般处理程序,就添加成功了,不知道是不是我添加过,所以在右键里面有。
另一种添加方式是右键项目-->添加-->新建项,然后如下图所示。
但我诧异的发现两种添加方式添加出来的文件图标不一样。
第一种方式添加图标和最下方的WebService相同,而第二种添加方式只添加了一个类。
先不管第二种,第一种生成的代码有两个文件
Handler1.ashx
- <%@ WebHandler Language="C#" CodeBehind="Handler1.ashx.cs" Class="WebApplication1.Handler1" %>
Handler1.ashx.cs
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Web;
- namespace WebApplication1
- {
- /// <summary>
- /// Handler1 的摘要说明
- /// </summary>
- public class Handler1 : IHttpHandler
- {
- public void ProcessRequest(HttpContext context)
- {
- context.Response.ContentType = "text/plain";
- context.Response.Write("Hello World");
- }
- public bool IsReusable
- {
- get
- {
- return false;
- }
- }
- }
- }
接下来就是怎么访问这个文件,我直接点F5运行项目,然后在浏览器地址栏加上路径,我整个路径是这样的http://localhost:6988/Handler1.ashx
然后成功看到浏览器上一个光秃秃的Hello World