在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
一、简易的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();
|
请发表评论