C# .net基于Http实现web server(web服务)

简介: 原文:C# .net基于Http实现web server(web服务)什么是 web server?  百度百科是这么解释的: Web Server中文名称叫网页服务器或web服务器。WEB服务器也称为WWW(WORLD WIDE WEB)服务器,主要功能是提供网上信息浏览服务。
原文: 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协议,我们只需要基于它写一个自己的处理类。

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

目录
相关文章
|
前端开发 JavaScript 安全
前端性能调优:HTTP/2与HTTPS在Web加速中的应用
【10月更文挑战第27天】本文介绍了HTTP/2和HTTPS在前端性能调优中的应用。通过多路复用、服务器推送和头部压缩等特性,HTTP/2显著提升了Web性能。同时,HTTPS确保了数据传输的安全性。文章提供了示例代码,展示了如何使用Node.js创建一个HTTP/2服务器。
399 3
|
Java 物联网 C#
C#/.NET/.NET Core学习路线集合,学习不迷路!
C#/.NET/.NET Core学习路线集合,学习不迷路!
606 0
|
10月前
|
SQL 小程序 API
如何运用C#.NET技术快速开发一套掌上医院系统?
本方案基于C#.NET技术快速构建掌上医院系统,结合模块化开发理念与医院信息化需求。核心功能涵盖用户端的预约挂号、在线问诊、报告查询等,以及管理端的排班管理和数据统计。采用.NET Core Web API与uni-app实现前后端分离,支持跨平台小程序开发。数据库选用SQL Server 2012,并通过读写分离与索引优化提升性能。部署方案包括Windows Server与负载均衡设计,确保高可用性。同时针对API差异、数据库老化及高并发等问题制定应对措施,保障系统稳定运行。推荐使用Postman、Redgate等工具辅助开发,提升效率与质量。
429 0
|
开发框架 搜索推荐 算法
一个包含了 50+ C#/.NET编程技巧实战练习教程
一个包含了 50+ C#/.NET编程技巧实战练习教程
428 18
|
缓存 算法 安全
精选10款C#/.NET开发必备类库(含使用教程),工作效率提升利器!
精选10款C#/.NET开发必备类库(含使用教程),工作效率提升利器!
542 12
|
开发框架 人工智能 .NET
C#/.NET/.NET Core拾遗补漏合集(24年12月更新)
C#/.NET/.NET Core拾遗补漏合集(24年12月更新)
227 6
|
开发框架 算法 .NET
C#/.NET/.NET Core技术前沿周刊 | 第 15 期(2024年11.25-11.30)
C#/.NET/.NET Core技术前沿周刊 | 第 15 期(2024年11.25-11.30)
239 6
|
开发框架 Cloud Native .NET
C#/.NET/.NET Core技术前沿周刊 | 第 16 期(2024年12.01-12.08)
C#/.NET/.NET Core技术前沿周刊 | 第 16 期(2024年12.01-12.08)
253 6
|
算法 Java 测试技术
Benchmark.NET:让 C# 测试程序性能变得既酷又简单
Benchmark.NET是一款专为 .NET 平台设计的性能基准测试框架,它可以帮助你测量代码的执行时间、内存使用情况等性能指标。它就像是你代码的 "健身教练",帮助你找到瓶颈,优化性能,让你的应用跑得更快、更稳!希望这个小教程能让你在追求高性能的路上越走越远,享受编程带来的无限乐趣!
835 13
|
开发框架 监控 .NET
C#进阶-ASP.NET WebForms调用ASMX的WebService接口
通过本文的介绍,希望您能深入理解并掌握ASP.NET WebForms中调用ASMX WebService接口的方法和技巧,并在实际项目中灵活运用这些技术,提高开发效率和应用性能。
909 5

热门文章

最新文章