C# .net基于Http实现web server(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服务,是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, , 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, , res.Length);
}
}
如何使用?
1.写一个class 继承自 Servlet 类,在这里做具体的 业务逻辑实现。
2.复制main方法里的代码,在合适的实际 启动 httpListener。
http://msdn.microsoft.com/zh-cn/library/system.net.httplistener(v=vs.110).aspx
C# .net基于Http实现web server(web服务)的更多相关文章
- Difference between web server ,web container and application server
In Java: Web Container or Servlet Container or Servlet Engine : is used to manage the components lik ...
- web server && web framework角色区分
问题 web framework是否包括webserver? 是否可以包括? webserver 和 framework的关系是? https://www.quora.com/What-is-the- ...
- Web Server 分布式服务: Nginx负载均衡
Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器.由俄罗斯的程序设计师Igor Sysoev所开发,供俄国大型的入口网站及搜索引擎Rambler使用.其 ...
- 基于Docker + Consul + Nginx + Consul-Template的服务负载均衡实现(转)
转:https://www.jianshu.com/p/fa41434d444a 前言 上一篇文章使用 Consul 和 Registrator 在 docker 的容器环境中搭建了服务注册和发现集群 ...
- 自己动手实现网络服务器(Web Server)——基于C#
前言 最近在学习网络原理,突然萌发出自己实现一个网络服务器的想法,并且由于第三代小白机器人的开发需要,我把之前使用python.PHP写的那部分代码都迁移到了C#(别问我为什么这么喜欢C#),之前使用 ...
- Jexus Web Server 完全傻瓜化图文配置教程(基于Ubuntu 12.04.3 64位)[内含Hyper-v 2012虚拟机镜像下载地址]
1. 前言 近日有感许多新朋友想尝试使用Jexus,不过绝大多数都困惑徘徊在Linux如何安装啊,如何编译Mono啊,如何配置Jexus啊...等等基础问题,于是昨日向宇内流云兄提议,不如搞几个配置好 ...
- Tomcat服务器本地的搭建,以及在 IDEA软件下的配置,以及项目的测试运行(基于supermvc框架下的web)
一.声明 使用了基于springmvc的supermvc的web框架.实习公司的框架. 二.tomact的下载与安装 1选择适合自己电脑配置的jdk和jre版本(截图来自tomcat的官方网站http ...
- 【转】推荐介绍几款小巧的Web Server程序
原博地址:http://blog.csdn.net/heiyeshuwu/article/details/1753900 偶然看到几个小巧有趣的Web Server程序,觉得有必要拿来分享一下,让大家 ...
- Jexus-5.6.3使用详解、Jexus Web Server配置
一.Jexus Web Server配置 在 jexus 的工作文件夹中(一般是“/usr/jexus”)有一个基本的配置文件,文件名是“jws.conf”. jws.conf 中至少有 Site ...
随机推荐
- 构建自己的Java并发模型框架
Java的多线程特性为构建高性能的应用提供了极大的方便,可是也带来了不少的麻烦.线程间同步.数据一致性等烦琐的问题须要细心的考虑,一不小心就会出现一些微妙的,难以调试的错误. 另外.应用逻辑和线程逻辑 ...
- Could not load file or assembly'System.Data.SQLite.dll' or one of its depedencies
[问题] 在我本机的开发环境c#连接sqlite3没有问题,但是release版本号移植到其它的机器就提示Could not load file or assembly'System.Data. ...
- SQL注入的原理解说,挺好!
原文地址:http://www.cnblogs.com/rush/archive/2011/12/31/2309203.html 1.1.1 总结 前几天,国内最大的程序猿社区CSDN网站的用户数据库 ...
- GRUB2配置详解:默认启动项,超时时间,隐藏引导菜单,配置文件详解,图形化配置
配置文件详解: /etc/default/grub # 设定默认启动项,推荐使用数字 GRUB_DEFAULT=0 # 注释掉下面这行将会显示引导菜单 #GRUB_HIDDEN_TIMEOUT=0 # ...
- 超人学院Hadoop大数据资源共享
超人学院Hadoop大数据资源共享-----数据结构与算法(java解密版) http://yunpan.cn/cw5avckz8fByJ 訪问password b0f8 很多其它精彩内容请关注: ...
- simpleDateFormat日期格式转换
1------------------------------------------------------------------------------------- package com.n ...
- 阿里游戏大数据sesson2_RF&GBRT(上)
----------一个小的游戏体验,对于不太熟悉Xlab RF和GBRT同学们都叫参考,不喜勿喷,大神绕道,米姆达. . .. .---------- 6月初的时候LR 做到4.9后一直上不去,看群 ...
- 乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
原文:乐在其中设计模式(C#) - 访问者模式(Visitor Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 访问者模式(Visitor Pattern) 作者:webabc ...
- ExtJS4 根据分配不同的树形菜单在不同的角色登录后
继续我的最后.建立cookie后,带他们出去 var userName = Ext.util.Cookies.get('userName'); var userAuthority = Ext.util ...
- spring集成quartz
spring集成quartz 注意:出现异常"Caused by: java.lang.IncompatibleClassChangeError: class org.springframe ...