• 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();

        

      

  • 相关阅读:
    Codeforces 525C Om Nom and Candies 枚举 + 复杂度分析
    Codeforces 526B Om Nom and Dark Park 树形dp
    Codeforces 526A King of Thieves 枚举
    Regionals 2014 Asia
    Regionals 2014 Asia
    access数据库和sqlsever数据库sql语句的布尔值boolean的写法
    取消阴影行
    引用其他单元的2种方法
    选中阴影行
    全选
  • 原文地址:https://www.cnblogs.com/ruanyifeng/p/2837705.html
Copyright © 2020-2023  润新知