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

C#实现的中软WebServer架构范例解析 本文还有配套的精品资源,点击获取 简介:本示例详细探讨了如何使用C#语言和.NET框架构建一个基于Northwind数据库的Web服务器应用程序。演示了C#在编写服务器端代码、处理HTTP请求和数据库交互中的应用,并提供了关于ASP.NET框架、路由规则和MVC设计模式的深入理解。此外,通过分析源码,开发者可以学习到代码组织、错误处理和性能优化的实践方法。 1. ... 阅读详情

相关推荐

基于SQL Server与C#的Web页面检索及数据存储系统实战源码

数据访问层应通过接口与上层解耦,推荐使用Repository模式 + Entity Framework Core。定义通用仓储接口:实体专用接口可继承泛型接口:具体实现:// 实现IRepository<T>方法...通过依赖注入注册服务:层级职责技术栈示例UI Layer请求处理、视图渲染BLL业务规则、流程控制DAL数据持久化、查询优化日志、缓存、邮件等辅助服务。

weixin_26805451的博客 1007

C# 两种方法实现HTTP协议迷你服务器

本文以两种稍微有差别的方式用C#语言实现HTTP协议的服务器类,之所以写这些,也是为了自己能更深刻了解HTTP底层运作。 要完成高性能的Web服务功能,通常都是需要写入到服务,如IIS,Apache Tomcat,但是众所周知的Web服务器配置的复杂性,如果我们只是需要一些简单的功能,安装这些组件看起来就没多大必要。我们需要的是一个简单的HTTP类,可以很容易地嵌入到简单的Web...

weixin_30545285的博客 2375

基于C#与ASP.NET的Web即时聊天工具开发实战

构建一个Web即时聊天系统,表面上是在“搭积木”,实际上是在训练一种系统思维能力:如何平衡实时性与资源消耗?如何设计可扩展的消息模型?如何在老旧数据库上做出高性能方案?如何保障安全的同时不失易用性?这些问题没有标准答案,只有不断权衡与迭代。而C#、ASP.NET、SQL Server这套经典组合,虽然不像Node.js或Go那样时髦,但它稳定、成熟、文档齐全,特别适合企业级项目的快速落地。所以,别再觉得“老技术”就不值得学了。真正的高手,从来都是。

weixin_29781865的博客 750

C#开发轻量级 高性能HTTP服务器

转自:源之缘cnblogs.com/yuanchenhui/p/httpserver.html前言http协议是互联网上使用最广泛的通讯协议了。Web通讯也是基于http协议;对应c#开发者来说ASP.NET Core是最新的开发Web应用平台。由于最近要开发一套人脸识别系统,对通讯效率的要求很高。虽然.NET Core对http处理很优化了,但是我决定开发一个轻量级http服务器;不求功能多强...

weixin_68436326的博客 5323

HttpServer:一个使用C#编写的简易Web服务器

HttpServer 一个使用C#编写的简易Web服务器, 目前支持: 静态页面处理 :grinning_face_with_smiling_eyes: GET/POST请求 :grinning_face_with_smiling_eyes: 支持HTTPS协议 :grinning_face_with_smiling_eyes: 支持返回JSON :worried_face: 支持路由方法 :worried_face: 快速开始 HTTP服务器示例 class Program { static void Main(string[] args) { ExampleServer server = new ExampleServer("0.0.0.0",4050); server.Start(); } } GET/POST请求示例 public override void OnPost(HttpRequest request, HttpResponse response) { //获取客户端传递的参数 string

C# HttpServer 实现

C# httpserver 的实现,简单的封装,非常实用!更适合初学者的学习、借鉴

基于.NET框架的企业内部文档分析系统集成CasRel模型

本文介绍了如何在星图GPU平台上自动化部署CasRel关系抽取模型,并将其集成到.NET企业应用中以构建智能文档分析系统。该模型能够自动从合同、报告等企业内部文档中提取实体关系三元组,典型应用场景包括快速定位合同中的关键条款与责任方,从而提升法务与风控部门的信息处理效率。

weixin_33363025的博客 29

C#版支持高并发的HTTP服务器源码

C#版支持高并发的HTTP服务器源码,异步处理并发调用,应用于WINFORM程序中,创建自己的HTTP SERVER的首选办法。

.NET笔试题集(四)

1、请你简单的说明数据库建立索引的优缺点 使用索引可以加快数据的查询速度,不过由于数据插入过程中会建索引,所以会降低数据的插入、更新速度,索引还会占磁盘空间。   2、什么是WEB服务控件?使用WEB服务控件有那些优势、劣势? web服务控件就是可以在服务器执行的控件,优势在于可以回传数据(ViewState),带有事件驱动(doPostBack),简化了Html标签的使用,使得开发ASP

Ai大模型,odoo,idempiere,metasfresh,低代码,ecshop数据采集发布接口,zencart,lightinthebox,shopex 数据采集接口 1208

SocraticLM: Exploring Socratic Personalized Teaching with Large Language Models

大型语言模型(LLM)被认为是推进智能教育的一项关键技术,因为它们展示了深入理解教学场景和为学生提供个性化指导的潜力。然而,当前个性化教学中基于LLM的应用主要遵循“问答”范式,学生被动地获得答案和解释。在本文中,我们提出了苏格拉底式教学模式(SocraticLM ),它实现了一种苏格拉底式的“发人深省”的教学范式,实现了真正的课堂教师的角色,让学生积极参与到真正掌握解决问题所需的思考过程中。

weixin_43961909的博客 2883

别再傻傻分不清了!Anaconda和Miniconda到底选哪个?附保姆级安装与镜像源配置(Windows/Mac)

本文详细解析了Anaconda和Miniconda的核心差异,包括体积、预装内容、系统资源占用等关键维度,并提供了针对不同需求的决策框架。附有Windows和Mac双平台的详细安装与配置指南,帮助用户根据实际需求选择最适合的conda工具,提升开发效率。

weixin_30315723的博客 426

C# .NET 搭建简易 Http server

要完成高性能的Web服务功能,通常都是需要用到服务,如:IIS、Apache、Tomcat和Nginx,但是众所周知的Web服务器配置的复杂性,如果我们只是需要一些简单的功能,安装这些组件看起来就没多大必要。我们需要的是一个简单的HTTP类,可以很容易地嵌入到简单的Web请求的服务,加到自己的程序里。 .net框架下有一个简单但很强大的类System.Net.HttpListener。这个类...

mycode2007的专栏 3364

手把手教你用VS Code + Codex在WSL中高效编程(避坑指南)

本文提供了一份详细的避坑指南,教你如何在WSL环境中高效配置和使用VS Code与OpenAI Codex。文章核心在于解决WSL内Codex扩展的OAuth登录失败问题,推荐将扩展安装在Windows本地,并通过UNC路径直接访问WSL文件系统,从而实现AI辅助编程与Linux开发环境的无缝结合,提升编码效率。

weixin_28677451的博客 1063

C# HTTP Server C# 两种方法实现HTTP协议迷你服务器

C# HTTP Server   2013-03-14 20:39:13|  分类: CSharp |  标签: |举报 |字号大中小 订阅         用微信  “扫一扫” 将文章分享到朋友圈。   用易信  “扫一扫” 将文章分享到朋友圈。     下载LOFTER 我的照片书 

autumn20080101的专栏 1万+

PICO+Unity MR空间网格开发实战:从零构建透视交互场景

本文详细介绍了使用PICO 4 Ultra与Unity引擎进行MR空间网格开发的完整实战流程。从环境准备、项目初始化、核心组件配置,到空间网格的生成、可视化与物理交互实现,手把手教你构建一个能识别真实环境并发射虚拟小球的透视交互场景。文章重点解析了PICO SDK中空间网格功能的关键配置与优化技巧,并提供了真机部署与调试的实用指南。

e3f4g5的博客 490

长短期记忆网络(LSTM)预测模型及其Python和MATLAB实现

LSTM 通过独特的门控机制解决了传统 RNN 的梯度消失和梯度爆炸问题,使其在处理长序列时具有显著优势。随着技术的不断发展,LSTM 及其变种(如 Bi-directional LSTM、Stacked LSTM 等)有望在更复杂的任务中发挥重要作用。2. **可视化真实值和预测值**:通过绘图来比较真实值和预测值,判断模型的准确性。2. **输入门(Input gate)**:决定当前的输入信息对细胞状态的影响。1. **细胞状态(Cell state)**:保持信息在时间步之间的传递。

qq_45441438的博客 2055

基于IOT-Tree Server支持的gRPC服务,使用C#开发自己的设备监控客户端

摘要:本文介绍了gRPC在IOT-TreeServer中的应用及开发方法。gRPC作为高性能RPC框架,支持多语言通信,配合Protocol Buffers实现高效数据传输。IOT-TreeServer通过gRPC服务简化了客户端开发,统一设备数据为标签格式(Tag),使客户端只需关注标签路径。开源项目iottree.net提供了C#封装的gRPC客户端库,通过Visual Studio可快速开发专用客户端。文章详细说明了开发流程,包括环境搭建、服务启用、API调用等,展示了如何监听标签数据和控制设备。

qq_40065619的博客 1304

AI应用架构师实战:半导体器件仿真AI智能体系统搭建

半导体器件仿真(如MOSFET、FinFET等)是芯片设计的核心环节,传统流程依赖专家手动调参、多物理场仿真引擎(如TCAD)耗时(小时级至天级)、经验难以沉淀,导致研发周期长、成本高。如何构建一个AI智能体系统,实现仿真任务的自动化调度、参数智能优化、结果分析与知识沉淀,成为提升半导体研发效率的关键挑战。

移动开发前沿的博客 1222

C#毕业设计——基于C#+asp.net+sqlserver的网上书店系统设计与实现(毕业论文+程序源码)——网上书店系统

大家好,今天给大家介绍基于C#+asp.net+sqlserver的网上书店系统设计与实现,文章末尾附有本毕业设计的论文和源码下载地址哦。文章目录: 1.正文阐述的是ASP. NET作为一种全新的动态网站开发技术,它是通过大量使用组件技术,将Web浏览器与Web服务器之间的网络通信完全的包装起来,在ASP. NET中,动态网站开发技术已经变为利用组件搭建“基于Web的应用程序”。论文还阐述了网站开发技术的现状,通过对各个技术的系统比较从而对ASP.NET技术做了较深入的研究,并结合研究情况开发设计了一个网上

m0_66238867的博客 5461

100天精通Python(可视化篇)——第109天:Pyecharts绘制各种常用地图(参数说明+代码实战)

100天精通Python(可视化篇)——第109天:Pyecharts绘制各种常用地图(参数说明+代码实战)

努力让自己发光,对的人才能迎着光而来 8万+

C#上位机+YOLO实战:从环境搭建到实现首个目标检测(零基础入门)

/ YOLOv8的类别名称(共80类,对应COCO数据集)// ONNX推理会话// YOLOv8的输入宽度// YOLOv8的输入高度本文从技术选型、环境搭建到代码实现,详细介绍了如何将C#上位机与YOLOv8结合,实现基础的目标检测功能。整个过程避开了常见的坑点,同时对核心原理和代码逻辑进行了详细解析,希望能帮助零基础的开发者快速入门。实际上,C#上位机+YOLO的组合在工业领域有非常广泛的应用,本文的案例只是一个起点。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 791

server接收dtu透传代码_深入ASP.NET Core源代码之 - Web Server Kestrel

测试代码运行环境: OS:Ubuntu 18.04 64bit .NET Core SDK Version: 3.1.101 源代码版本:release/3.1Kestrel的本质 - Web ServerKestrel是http://ASP.NET Core框架内置的默认Web Server 什么是Web Server? 根据维基百科的定义: Web Server是可以处理来自客户端的HTTP...

weixin_40008884的博客 287

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

上一篇: BGP的基本原理
下一篇: 惊呆了,ReSharper支持XAML编辑了
weixin_34026484
博客等级 码龄11年 4642粉丝 152原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值