ASP.NET本质论阅读网站的应用程序

一、简易的web服务器原理

1.socket传输,制定响应包状态,包头包体,传输通讯。

2.简化TCP传输-基于TCPListener的web服务器

3.简化HTTP传输-基于HTTPListener的WEB服务器

二、请求处理:进入ASP.NET、

1.应用程序域:程序集管理的最小逻辑单位(AppDomain),有4大特点

      1.隔离:不同程序域间不能直接访问,跨程序域访问的对象,必须派生自System.MarshalByRefObject

      2.卸载:被加载的程序集,只能以应用程序域为单位卸载

      3.安全:

      4.配置:

2.ASP.NET将网站应用程序寄宿在一个独立的应用程序域中,以便于管理。

3.创建web应用程序域:ApplicationHost的静态方法CreateApplicationHost(Type hostType,string virDir,string phyDir)

4.处理请求对象封装在SimpleWorkerRequest(string page(页面名称.aspx),string query(请求参数), TextWriter output(内容输出流)):HttpWorkerRequest

5.System.Web.HttpRuntime类是整个ASP.NET服务器处理的入口

  静态属性:反映web应用程序域的设置信息,如AppDomainAppPath web应用程序的文件目录等

  静态方法(ProcessRequest(HttpWorkerRequest))处理请求

      对参数HttpWorkerRequest分析和分解,创建方便用于网站应用程序处理用的对象HttpRequest和HttpResponse

 6.辅助常用工具类HttpServerUtility

  1.html和url encode 与decode

7.UA User-Agent :Mozilla/5.0.......Firefox/3.6.6     MSIE8.0

  Microsoft.NET\Framework\4.0\Config\Browers

  类:HttpBrowerCapabilities  Brower

8.自定义asp.net web服务器

  1.创建WebServer类:MarshalByRefObject----//该类一个对象实例作为与监听程序之间的通讯对象,跨域,所以要继承该类

  2.创建处理请求方法:ProcessRequest(string page,string query,System.IO.TextWriter writer) ----//跨域访问,参数必须支持序列化

  3.将参数封装到SimpleWorkerRequest对象实例,通过HttpRuntime进行处理(.ProcessRequest)

  

Public class WebServer:MarshalByRefObject
{
        public void ProcessRequest(
                                string page,
                                string query,
                                system.io.textwriter writer)
        {
              system.web.hosting.SimpleWorkerRequest worker=
                new  system.web.hosting.SimpleWorkerRequest(
                             page,query,writer);
                system.web.HttpRuntime.ProcessRequest(worker);}}

  4. 创建监听程序

    1.创建ProcessRequestHandler 委托,用于设置监听程序接收请求后实际调用的方法引用。

    2.this.ProcessRequest(request.url.AbsolutePath,request.url.query,system.io.StringWriter); ----//利用委托调用ASP.NET服务器进行处理

    3.StringWriter.Tostring()返回处理结果,sw.close();

    4.Response.ContentLength ,Response.ContentType, Content 返回响应包

   5.创建web应用程序域,启动网站------部署程序域

    Type type=typeof(ASPNET.Server.WebServer);

    ASPNET.Server.WebServer server =CreateWorkerAppDomainWithHost("/","e:\\website\\", type) as ASPNET.Server.WebServer

  6.启动网站

    SimpleHttpListener handler = new SimpleHttpListener ();

    handler.SetProcessRequest (server.ProcessRequest);

    handler.Run();

    

  

原文地址:https://www.cnblogs.com/ruanyifeng/p/2837705.html