ASP.NET之自定义同步HTTP处理程序(图文教程)

 更新时间:2021年9月22日 10:17  点击:1694

一、前言

说来这片简单的教程还真是碰巧,是刚好我在写另一个页指令的时候看到的。就跟着进来看了看是什么东西,发现比我们之前只会用.ashx,并且只能在申请这个文件才可以进行响应。这些似乎让它变不灵活,不能让我们灵活的应用。而自定义HTTP处理程序可以完全消除上面的问题,它只是一个.cs的类文件,并且你只要按照很简单的准备工作就可以获得很多的灵活度:

1.可以自定义用户访问何网页时响应该文件并把数据呈现发送给客户端 

2.可以对所有具有一致的后缀名的请求文件定义一个处理程序 

3.具有同步与异步选择

我相信一定有人对于上面的说有一定不的理解,这里我需要解释它的一个重要意义,那么大家就自然知道它的灵活所在了。

我们先举例:

1.比如你访问    http://www.****.com/web1.msll

你一定发现了问题所在.后缀名是 .msll 你浏览网页到如今一定没有见过。而这个的确就是自定义HTTP处理程序的一个特点所在,后缀名可以自己伪造。这个时候你一定会认为 web1 是那个 .cs 文件的名称,但是结果是 web1 根本不是那个 .cs 文件的文件名.他们是通过绑定来实现的。比如我实现了一个  he.cs 的类,然后我将其绑定到  hehehe.ppd 那么当你访问 http://www.*****.com/hehehe.ppd  那么响应这个页面的是 he.cs 的输出结果

2.我们还是假设你访问  http://www.****.com/list1.ssm

                       http://www.****.com/list2.ssm

                       http://www.****.com/list3.ssm

   假如我告诉你这个三个看似不同的页面其实都是一个 HTTP处理程序的输出结果,这个其实很好理解,如果我写了一个 bbsss.cs 的类,并且实现了有关功能。然后我将其绑定到 *.ssm 你可以发现这里是 *.ssm  这个时候你就按照你正常的思考,就是只要是对后缀名是 .ssm 页面的申请都是使用同一个 bbsss.cs 类,这下是不是有趣了

二、注册与绑定

   为什么要有这两部呢?而且还是要注册与绑定这两个呢?

   答案是 你只写一个类 vs是不可能知道你这个东西是干什么的,所以我们需要在 web.config 中注册我们自定义的HTTP处理程序。而绑定则是让iis知道我们这个站点中含有一个自定义的HTTP处理程序。(下面我将以 iis7 为例说明如何绑定)

1.注册

复制代码 代码如下:

<configuration>
<system.web>
<httpHandlers>
<add verb="*" path="<!-- 这里写需要绑定的客户端申请的页面(*.smm,*.ffs,web1.ffe) -->" type="<!-- 这里写处理程序的类名 -->"
</httpHandlers>
</system.web>
</configuration>

以上需要自行编写的部分我都已使用注释写好

2.绑定( iis7 )

    1) 打开 iis7 -》 打开  网站  节点 -》 点击你的网站的名称

    2) 双击

    3) 点击

    4)

    5) 最后点击 确定 这样在 iis 中的绑定就完成了(后面的完整例子我将会以文字介绍该过程)

三、关于类的实现注意点

   虽然我们介绍完了注册与绑定,但还不是所有,关于类的实现也有一定的要求。根据MSDN文档的说明必须实现 ProcessRequest 方法与 IsReusable 属性

关于 ProcessRequest 可以暂时理解为 Page_Load (即使他比Page_Load更底层)

其次就是没有内置的 Request 与 Response ,可能有些人要崩溃了那怎么写啊,很简单的问题没有内置我们就自己去定义

IsReusable 的类型是 bool 类型,而且只要实现 get 不需要实现 set ,如果返回 true 表示使用线程池 如果为 false 表示不使用

关于这个类文件的放置也有要求,要放在App_Code 文件夹下(vs的站点中可以直接新建这个特殊的文件夹)

四、完整的例子(自行新建类)

1.

   以下为 HelloWorldHandler.cs 类的具体实现(放置在 App_Code 文件夹下)

复制代码 代码如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

/// <summary>
///HelloWorldHandler 的摘要说明
/// </summary>
public class HelloWorldHandler : IHttpHandler
{
public HelloWorldHandler()
{
}

public void ProcessRequest(HttpContext context)
{
HttpRequest Request = context.Request;
HttpResponse Response = context.Response;
Response.Write("<html>");
Response.Write("<body>");
Response.Write("<h1>hello</h1>");
Response.Write("</body>");
Response.Write("</html>");
}

public bool IsReusable
{
get
{
return false;
}
}
}

2.以下为 web.config 的内容
复制代码 代码如下:

<httpHandlers> 
<add verb="*" path="*.sample" type="HelloWorldHandler" /> 
</httpHandlers>

3.IIS 配置(不要忘记把项目部署到 iis 中)

以下为具体配置

然后测试 http://localhost/SampleApplication/test.sample(端口为 80 时)

你就可以看到你的成果了

五、完结

到此你已经基本掌握了 自定义同步HTTP处理程序 ,当然这个只是一小部分,后面我们还会接触到异步,因为同步在用户访问量很大的情况下将会使服务器资源迅速耗尽,而且也会让降低用户的实用性

[!--infotagslink--]

相关文章

  • 浅析c# 线程同步

    这篇文章主要介绍了c# 线程同步的相关资料,帮助大家更好的理解和学习c#,感兴趣的朋友可以了解下...2020-08-29
  • MYSQL主从不同步延迟原理分析及解决方案

    1. MySQL数据库主从同步延迟原理。要说延时原理,得从mysql的数据库主从复制原理说起,mysql的主从复制都是单线程的操作,主库对所有DDL和DML产生binlog,binlog是顺序写,所以效率很高,slave的Slave_IO_Running线程到主库取日...2013-10-04
  • C#同步网络时间的方法实例详解

    这篇文章主要介绍了C#同步网络时间的方法,以实例形式较为详细的分析了C#获取网络时间与同步本机系统时间的相关技巧,非常具有实用价值,需要的朋友可以参考下...2020-06-25
  • 检测mysql同步状态实现代码(php/linux)

    本文章介绍两个实例来介绍mysql同步状态检测实现程序有需要的朋友可参考一下。 代码如下 复制代码 #!/bin/sh #check MySQL_Slave St...2016-11-25
  • VSCode 云同步扩展设置Settings Sync插件

    这篇文章主要介绍了VSCode 云同步扩展设置Settings Sync插件,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-06-29
  • MySQL 5.5主从同步设置笔记分享

    先修改Master(10.1.123.197)的 my.cnf 配置在 [mysqld] 中新增以下内容:复制代码 代码如下:log-bin=mysql-binlog-bin-index=mysql-bin.indexserver-id = 1sync_binlog=1binlog_format=mixed然后指定要做同步的数据库,并...2014-05-31
  • C#多线程及同步示例简析

    这篇文章主要为大家详细介绍了C#多线程及同步示例,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2020-06-25
  • C#实现多线程的同步方法实例分析

    这篇文章主要介绍了C#实现多线程的同步方法,实例分析了C#线程同步的实现技巧,具有一定参考借鉴价值,需要的朋友可以参考下...2020-06-25
  • vue data变量相互赋值后被实时同步的解决步骤

    这篇文章主要介绍了vue data变量相互赋值后被实时同步的解决步骤,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-08-05
  • 基于C# 写一个 Redis 数据同步小工具

    Redis支持主从同步。数据可以从主服务器向任意数量的从服务器上同步,从服务器可以是关联其他从服务器的主服务器。这篇文章主要介绍了用 C# 写一个 Redis 数据同步小工具,需要的朋友可以参考下...2020-06-25
  • php 怎么跨域写cookie实现同步登陆代码

    //加上 代码如下 复制代码 header('p3p: cp="cura adma deva ps教程ao psdo our bus uni pur int dem sta pre com nav otc noi dsp cor"'); ...2016-11-25
  • Oracle通过LogMiner实现数据同步迁移

    这篇文章主要介绍了Oracle通过LogMiner实现数据同步迁移的方法,文中讲解非常细致,代码帮助大家更好的理解和学习,感兴趣的朋友可以了解下...2020-12-08
  • c# 进程之间的线程同步

    这篇文章主要介绍了c# 进程之间的线程同步,帮助大家更好的理解和学习c#,感兴趣的朋友可以了解下...2020-12-08
  • Sersync+Rsync实现触发式文件同步实战过程

    sersync是使用c++编写,而且对linux系统文 件系统产生的临时文件和重复的文件操作进行过滤。下面通过本文给大家分享Sersync+Rsync实现触发式文件同步实战过程,需要的朋友参考下吧...2020-04-25
  • 简述JAVA同步、异步、阻塞和非阻塞之间的区别

    这篇文章主要介绍了JAVA同步、异步、阻塞和非阻塞之间的区别,文中讲解非常细致,帮助大家更好的理解和学习,感兴趣的朋友可以了解下...2020-08-01
  • java 实现增量同步和自定义同步的操作

    这篇文章主要介绍了java 实现增量同步和自定义同步的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-01-25
  • C# 线程同步的方法

    这篇文章主要介绍了C# 线程同步的方法,文中讲解非常细致,代码帮助大家更好的理解和学习,感兴趣的朋友可以了解下...2020-11-03
  • MYSQL数据同步备份复制

    设置 MySql 数据同步   mysql从3.23.15版本以后提供数据库复制功能。利用该功能可以实现两个数据库同步,主从模式,互相备份模式的功能   数据库同步复制功能的设置...2016-11-25
  • C#使用Interlocked实现线程同步

    今天小编就为大家分享一篇关于C#使用Interlocked实现线程同步,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧...2020-06-25
  • Java并发编程之详解CyclicBarrier线程同步

    在之前的文章中已经为大家介绍了java并发编程的工具:BlockingQueue接口,ArrayBlockingQueue,DelayQueue,LinkedBlockingQueue,PriorityBlockingQueue,SynchronousQueue,BlockingDeque接口,ConcurrentHashMap,CountDownLatch,本文为系列文章第十篇,需要的朋友可以参考下...2021-06-23