博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C# .net基于Http实现web server(web服务)
阅读量:6927 次
发布时间:2019-06-27

本文共 3742 字,大约阅读时间需要 12 分钟。

什么是 web server? 

百度百科是这么解释的:

Web Server中文名称叫网页服务器或也称为(WORLD WIDE WEB)服务器,主要功能是提供网上信息浏览服务。

Web服务器可以解析(handles)。当Web服务器接收到一个(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    {        ///         /// 应用程序的主入口点。        ///         [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://ekkjl.baihongyu.com/

你可能感兴趣的文章
test
查看>>
开源重复数据删除软件
查看>>
SharePoint工作流解决方案QuickFlow系列(1)--QuickFlow入门
查看>>
Objective-C(IOS)推荐的属性读写方法
查看>>
oracle set指令
查看>>
vi编辑器使用技巧篇1
查看>>
HTTP协议状态码
查看>>
有感于dark channel的发现
查看>>
重读数据结构——线性表
查看>>
网页中, 代码调用360手机助手一键安装程序到手机
查看>>
IOS详解TableView——选项抽屉(天猫商品列表)
查看>>
[转]地图投影
查看>>
WorldWind源码剖析系列:影像图层类ImageLayer
查看>>
《Programming WPF》翻译 第8章 3.Storyboard
查看>>
HttpUrlConnection 的 setDoOutput 与 setDoInput
查看>>
RHEL6.4编译安装gcc4.8.1
查看>>
升级到Windows10
查看>>
理解并发,避免死锁
查看>>
Codeforces 549F Yura and Developers
查看>>
动态创建 Lambda 表达式
查看>>