IHttpHandler接口 处理静态页面-阿里云开发者社区

开发者社区> 老先生二号> 正文

IHttpHandler接口 处理静态页面

简介:
+关注继续查看

这样设置后,在本地运行。就可以出来效果了。但在远程访问,还是不行。这跟IIS的机制有关。普通的html,图片等等文件,IIS会自行处理,而不会交给asp.net处理的。所以你要在IIS中,更改该站点的配置。将.html的后缀名添加进去。这样就可以了。 
步骤:打开IIS—》右键点你的站点的属性--》在弹出的“虚拟目录”选项卡中—》点“配置”——》弹出“应用程序配置”窗口——》在“映射”选项卡中点“添加”——》在“可执行文件”一栏浏览,选择“C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll”,如果你的.net框架是其他的。则选择你使用的.net框架——》然后在“扩展名”一栏写入“.html”或者".htm"——》最后确定。

是否想学习HTTP处理程序编程呢?好吧,第一步工作是熟悉IHttpHandler接口。HTTP处理程序只不过是实现该接口的托管类。更确切地讲,同步HTTP处理程序实现IHttpHandler接口;而异步HTTP处理程序实现IHttpAsyncHandler接口。让我们先看看同步处理程序。

IHttpHandler接口的合同定义了HTTP处理程序以同步方式处理一个HTTP请求需要采取的行动。

1. IHttpHandler接口的成员

IHttpHandler接口只定义了两个成员:ProcessRequest和IsReusable,如表2.1所示。ProcessRequest是一个方法,而IsReusable是一个布尔逻辑属性。

表2.1  IHttpHandler接口的成员

成  员

描    述

IsReusable

该属性获得一个布尔值,指示另一个请求是否可以使用该HTTP处理程序的实例

ProcessRequest

该方法处理HTTP请求

Page类上的IsReusable属性返回false,表示需要该HTTP请求的新实例来服务一个页面请求。通常我们使它在所有情况下都返回false,并根据请求负荷的不同而要求它做一些有意义的处理。那些被用作筛选特殊请求的简单屏障的处理程序可以将IsReusable设置为true,以节省一些CPU周期。稍后我将用一个具体的实例来说明这一点。

ProcessRequest方法具有如下签名:

void ProcessRequest(HttpContext context);

它以请求的上下文作为输入,并确保该请求得到服务。在同步处理程序的情况下,当ProcessRequest返回时,准备把输出发到客户端。

2. 一个简单的HTTP处理程序

再次强调,HTTP处理程序只是一个实现了IHttpHandler接口的类。请求的输出是在ProcessRequest方法中建立的,如下面的代码所示:

using System.Web;

namespace ProAspNet20.Advanced.CS.Components

{

public class SimpleHandler : IHttpHandler

{

// Override the ProcessRequest method

public void ProcessRequest(HttpContext context)

{

context.Response.Write("<H1>Hello, I'm an HTTP handler</H1>");

}

// Override the IsReusable property

public bool IsReusable

{

get { return true; }

}

}

}

我们需要一个能够调用该处理程序的入口点。在此上下文中,该处理程序代码的入口点只不过是一个HTTP终点——即,一个公共的URL。该URL必须有一个惟一的名称,使IIS和ASP.NET运行库能够把它映射到该代码。注册时,HTTP处理程序和Web服务器资源之间的映射是通过web.config文件建立的。

<configuration>

<system.web>

<httpHandlers>

<add verb="*" path="myHandler.aspx"

type="ProAspNet20.Advanced.CS.Components.SimpleHandler" />

</httpHandlers>

</system.web>

</configuration>

<httpHandlers>节列出了当前应用程序可用的处理程序。这些设置指示,对myHandler.aspx终点的任何输入请求,由SimpleHandler处理程序负责处理。要注意的是,myHandler.aspx URL不必是服务器上的物理资源;它只是一个公共资源标识符。type属性引用包含该处理程序的类和程序集,它的标准格式是type[,assemly]。如果该组件在App_Code或其他保留文件夹中定义,则忽略该程序集信息。

 注意    如果在machine.config文件中输入上述设置,则将把SimpleHandler组件注册成可以从服务器机器上托管的所有Web应用程序内可调用的组件。

如果调用myHandler.aspx URL,将得到如图2.2所示的结果。

图2.2  一个响应myHandler.aspx请求的HTTP处理程序示例

这里所述的方法是使用HTTP处理程序最快、最简单的方法,但是有关HTTP处理程序注册的知识,我们还有很多要了解并且还有很多其他选项可以利用。现在,让我们考虑一个更复杂的HTTP处理程序示例。


HTTP处理程序与ASP.NET页面

我们应当利用HTTP处理程序资源来实现应用程序特有的功能,它们需要比常规的Web页面被更快地处理。在任何情况下,HTTP处理程序返回一个带有内容类型和主体的有效的HTTP响应。服务一个.ashx请求,或者一个自定义处理程序托管的任何其他请求,可能会导致比服务一个.aspx资源更快的代码。ASP.NET处理一个自定义的处理程序通常更快,因为这不必对用户代码引发任何中间事件(例如,Init, Load),不必托管任何视图状态,而且也不支持任何回发机制。大概说来,对一个自定义的HTTP处理程序的请求类似于对.aspx资源的请求,其中只发生呈现步骤。此外,找到服务一个页面请求所需的正确的HTTP处理程序可能需要更长的时间,因为这要牵涉到一个页面处理程序工厂的中间对象。

这就是说,我们要记住,ASP.NET页面只是一个HTTP处理程序——虽然是一个非常复杂而高级的HTTP处理程序。底层的处理机制完全相同。如果说满足某种特定需要的自定义的HTTP处理程序通常比页面更快,这是因为它们通常是为了直接得到给定结果而实现的。例如,假设我们需要显示从一个数据库中取出来的一个图像——这是我们将在第9章中详细讨论的一个主题,我们仍然需要将一个Image控件绑定到一个服务合适的MIME类型的URL。该URL应当是一个页面吗?它当然可以是页面;但是,如果使用一个自定义的HTTP处理程序,通常会处理得更快。

ASP.NET页面是一个复杂对象,并由一个自定义的而且必定是复杂的HTTP处理程序(Page类)提供服务。就服务自定义资源而言,一定要使用一个合适的处理程序,只包

 

含必需的智能和复杂度。为了说明这一点,假设要运行一个查询并提供一个数据库中存储的一个图像的字节,我们不需要任何视图状态和回发管理,也不需要向该应用程序激发事件。

应当使用一般的.ashx资源,还是使用一个自定义的扩展呢?这主要取决于需要实现的功能。ASHX方法是为相对简单的场景设计的,其中几乎不需要传递什么参数(或者根本不需要参数),并使用查询字符串来引入它们。如果有一个自定义的文档要处理,并且该文档具有以非平面的或复杂的布局进行组织的各种信息,则最好使用自定义的扩展。

分类: IIS,C# Asp.net

本文转自快乐就好博客园博客,原文链接:http://www.cnblogs.com/happyday56/archive/2008/12/25/1362121.html,如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
怎么设置阿里云服务器安全组?阿里云安全组规则详细解说
阿里云服务器安全组设置规则分享,阿里云服务器安全组如何放行端口设置教程
6935 0
使用OpenApi弹性释放和设置云服务器ECS释放
云服务器ECS的一个重要特性就是按需创建资源。您可以在业务高峰期按需弹性的自定义规则进行资源创建,在完成业务计算的时候释放资源。本篇将提供几个Tips帮助您更加容易和自动化的完成云服务器的释放和弹性设置。
7769 0
windows server 2008阿里云ECS服务器安全设置
最近我们Sinesafe安全公司在为客户使用阿里云ecs服务器做安全的过程中,发现服务器基础安全性都没有做。为了为站长们提供更加有效的安全基础解决方案,我们Sinesafe将对阿里云服务器win2008 系统进行基础安全部署实战过程! 比较重要的几部分 1.
5466 0
阿里云服务器远程登录用户名和密码的查询方法
阿里云服务器远程连接登录用户名和密码在哪查看?阿里云服务器默认密码是什么?云服务器系统不同默认用户名不同
444 0
阿里云ECS云服务器初始化设置教程方法
阿里云ECS云服务器初始化是指将云服务器系统恢复到最初状态的过程,阿里云的服务器初始化是通过更换系统盘来实现的,是免费的,阿里云百科网分享服务器初始化教程: 服务器初始化教程方法 本文的服务器初始化是指将ECS云服务器系统恢复到最初状态,服务器中的数据也会被清空,所以初始化之前一定要先备份好。
3230 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,云吞铺子总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系统盘、创建快照、配置安全组等操作如何登录ECS云服务器控制台? 1、先登录到阿里云ECS服务器控制台 2、点击顶部的“控制台” 3、通过左侧栏,切换到“云服务器ECS”即可,如下图所示 通过ECS控制台的远程连接来登录到云服务器 阿里云ECS云服务器自带远程连接功能,使用该功能可以登录到云服务器,简单且方便,如下图:点击“远程连接”,第一次连接会自动生成6位数字密码,输入密码即可登录到云服务器上。
16851 0
阿里云服务器ECS登录用户名是什么?系统不同默认账号也不同
阿里云服务器Windows系统默认用户名administrator,Linux镜像服务器用户名root
1133 0
677
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
文娱运维技术
立即下载
《SaaS模式云原生数据仓库应用场景实践》
立即下载
《看见新力量:二》电子书
立即下载