C# .net基于Http实现web server(web服务)
2014-04-16 02:21
417 查看
原文:C# .net基于Http实现web server(web服务)什么是 web server?
百度百科是这么解释的:
Web Server中文名称叫网页服务器或web服务器。WEB服务器也称为WWW(WORLD WIDE WEB)服务器,主要功能是提供网上信息浏览服务。
Web服务器可以解析(handles)HTTP协议。当Web服务器接收到一个HTTP请求(request),会返回一个HTTP响应(response),例如送回一个HTML页面。为了处理一个请求(request),Web服务器可以响应(response)一个静态页面或图片,进行页面跳转(redirect),或者把动态响应(dynamic response)的产生委托(delegate)给一些其它的程序例如CGI脚本,JSP(JavaServer Pages)脚本,servlets,ASP(Active Server Pages)脚本,服务器端(server-side)JavaScript,或者一些其它的服务器端(server-side)技术。无论它们(译者注:脚本)的目的如何,这些服务器端(server-side)的程序通常产生一个HTML的响应(response)来让浏览器可以浏览。
通俗的讲,Web服务器传送(serves)页面使浏览器可以浏览,然而应用程序服务器提供的是客户端应用程序可以调用(call)的方法(methods)。确切一点,你可以说:Web服务器专门处理HTTP请求(request),但是应用程序服务器是通过很多协议来为应用程序提供(serves)商业逻辑(business logic)。
常用的web Server
我们常用的web服务,是IIS,tomcat等。在进行网络通信的时候我们还会用到socket,甚至可以基于socket来实现HTTP通信,不过我们看一下更简单的实现。
我们能用来做什么?
IIS是非常强大的,功能齐全。我们的目标不是做一个和它一样的web server。而是基于这样的理念为我们的开发和架构服务。
特性和用处:
比如在我们的软件中 需要在多个应用程序通信时。
专用的功能带来更高的效率,比如我们仅仅处理某几一个网页的显示。我们见过路由里的那个管理路由器的页面吧,那就是一个轻量级的小web server实现,它可放不下一个windows + iis;
内嵌的windows应用程序,比如我们想在winform里嵌入webBrower,配合它来做一些应用。
我们的实现
基于 .net 框架的 HttpListener 类 来处理http协议,我们只需要基于它写一个自己的处理类。
如何使用?
1.写一个class 继承自 Servlet 类,在这里做具体的 业务逻辑实现。
2.复制main方法里的代码,在合适的实际 启动 httpListener。
参考:http://wenku.baidu.com/link?url=105Uuf34jmjbFnNEp1YTw1ry3Rx7_bXoKWQvLciQRUg9g5wJpViAedTYP45yUcruGEjuL7lACtwyu2g2KplUhOLA5XCLKbrY1NzWf7Ah1Fe
http://msdn.microsoft.com/zh-cn/library/system.net.httplistener(v=vs.110).aspx
百度百科是这么解释的:
Web Server中文名称叫网页服务器或web服务器。WEB服务器也称为WWW(WORLD WIDE WEB)服务器,主要功能是提供网上信息浏览服务。
Web服务器可以解析(handles)HTTP协议。当Web服务器接收到一个HTTP请求(request),会返回一个HTTP响应(response),例如送回一个HTML页面。为了处理一个请求(request),Web服务器可以响应(response)一个静态页面或图片,进行页面跳转(redirect),或者把动态响应(dynamic response)的产生委托(delegate)给一些其它的程序例如CGI脚本,JSP(JavaServer Pages)脚本,servlets,ASP(Active Server Pages)脚本,服务器端(server-side)JavaScript,或者一些其它的服务器端(server-side)技术。无论它们(译者注:脚本)的目的如何,这些服务器端(server-side)的程序通常产生一个HTML的响应(response)来让浏览器可以浏览。
通俗的讲,Web服务器传送(serves)页面使浏览器可以浏览,然而应用程序服务器提供的是客户端应用程序可以调用(call)的方法(methods)。确切一点,你可以说:Web服务器专门处理HTTP请求(request),但是应用程序服务器是通过很多协议来为应用程序提供(serves)商业逻辑(business logic)。
常用的web Server
我们常用的web服务,是IIS,tomcat等。在进行网络通信的时候我们还会用到socket,甚至可以基于socket来实现HTTP通信,不过我们看一下更简单的实现。
我们能用来做什么?
IIS是非常强大的,功能齐全。我们的目标不是做一个和它一样的web server。而是基于这样的理念为我们的开发和架构服务。
特性和用处:
比如在我们的软件中 需要在多个应用程序通信时。
专用的功能带来更高的效率,比如我们仅仅处理某几一个网页的显示。我们见过路由里的那个管理路由器的页面吧,那就是一个轻量级的小web server实现,它可放不下一个windows + iis;
内嵌的windows应用程序,比如我们想在winform里嵌入webBrower,配合它来做一些应用。
我们的实现
基于 .net 框架的 HttpListener 类 来处理http协议,我们只需要基于它写一个自己的处理类。
namespace HttpListenerDemo { static class Program { /// <summary> /// 应用程序的主入口点。 /// </summary> [STAThread] static void Main() { HttpListener httpListenner; httpListenner = new HttpListener(); httpListenner.AuthenticationSchemes = AuthenticationSchemes.Anonymous; httpListenner.Prefixes.Add("http://localhost:8090/"); httpListenner.Start(); new Thread(new ThreadStart(delegate { try { loop(httpListenner); } catch (Exception) { httpListenner.Stop(); } })).Start(); } private static void loop(HttpListener httpListenner) { while (true) { HttpListenerContext context = httpListenner.GetContext(); HttpListenerRequest request = context.Request; HttpListenerResponse response = context.Response; Servlet servlet = new MyServlet(); servlet.onCreate(); if (request.HttpMethod == "POST") { servlet.onPost(request, response); } else if (request.HttpMethod == "GET") { servlet.onGet(request, response); } response.Close(); } } } } public class Servlet { public virtual void onGet(System.Net.HttpListenerRequest request, System.Net.HttpListenerResponse response) { } public virtual void onPost(System.Net.HttpListenerRequest request, System.Net.HttpListenerResponse response) { } public virtual void onCreate() { } } public class MyServlet : HttpListenerDemo.Servlet { public override void onCreate() { base.onCreate(); } public override void onGet(HttpListenerRequest request, HttpListenerResponse response) { Console.WriteLine("GET:" + request.Url); byte[] buffer = Encoding.UTF8.GetBytes("OK"); System.IO.Stream output = response.OutputStream; output.Write(buffer, 0, buffer.Length); // You must close the output stream. output.Close(); //listener.Stop(); } public override void onPost(HttpListenerRequest request, HttpListenerResponse response) { Console.WriteLine("POST:" + request.Url); byte[] res = Encoding.UTF8.GetBytes("OK"); response.OutputStream.Write(res, 0, res.Length); } }
如何使用?
1.写一个class 继承自 Servlet 类,在这里做具体的 业务逻辑实现。
2.复制main方法里的代码,在合适的实际 启动 httpListener。
参考:http://wenku.baidu.com/link?url=105Uuf34jmjbFnNEp1YTw1ry3Rx7_bXoKWQvLciQRUg9g5wJpViAedTYP45yUcruGEjuL7lACtwyu2g2KplUhOLA5XCLKbrY1NzWf7Ah1Fe
http://msdn.microsoft.com/zh-cn/library/system.net.httplistener(v=vs.110).aspx
相关文章推荐
- C# .net基于Http实现web server(web服务)
- C# .net基于Http实现web server(web服务)
- [ZooKeeper.net] 1 模仿dubbo实现一个简要的http服务的注册 基于webapi
- 在C#中使用异步Socket编程实现TCP网络服务的C/S的通讯构架(一)----基础类库部分(来源:http://blog.csdn.net/yangjundeng/archive/2005/03/17/321920.aspx)
- .Net/C#: 实现支持断点续传多线程下载的 Http Web 客户端工具类 (第2版) (C# DIY HttpWebClient) 收藏
- .Net/C#: 实现支持断点续传多线程下载的 Http Web 客户端工具类 (C# DIY HttpWebClient)
- 使用ASP.NET Web Api构建基于REST风格的服务实战系列教程【五】——在Web Api中实现Http方法(Put,Post,Delete)
- .Net/C#: 实现支持断点续传多线程下载的 Http Web 客户端工具类 (C# DIY HttpWebClient)
- .Net/C#: 实现支持断点续传多线程下载的 Http Web 客户端工具类 (C# DIY HttpWebClient)
- C#、VB.NET使用HttpWebRequest访问https地址(SSL)的实现
- asp.net(c#)用Ajax调用web 服务实现省市县三级联动
- C#、VB.NET使用HttpWebRequest访问https地址(SSL)的实现
- C#、VB.NET使用HttpWebRequest访问https地址(SSL)的实现方法
- C#、VB.NET使用HttpWebRequest访问https地址(SSL)的实现方法
- .Net/C#: 实现支持断点续传多线程下载的 Http Web 客户端工具类 (C# DIY HttpWebClient)
- 使用ASP.NET Web Api构建基于REST风格的服务实战系列教程【五】——在Web Api中实现Http方法(Put,Post,Delete)
- Net/C#: 实现支持断点续传多线程下载的 Http Web 客户端工具类 (C# DIY HttpWebClient)
- Net/C#: 实现支持断点续传多线程下载的 Http Web 客户端工具类 (转,尚未整理)
- C#.Net: 实现支持断点续传多线程下载的 Http Web 客户端工具类
- [转]C#、VB.NET使用HttpWebRequest访问https地址(SSL)的实现