在下通过HttpListener实现简单的Http服务 网
HTTPListener提供了一个简单且可编程控制的Http协议侦听器,它可以轻松地提供一些Http服务,而无需启动大型服务程序,如IIS。使用HttpListener的方法流程很简单:主要分为以下几个步骤
1.创建一个HTTP侦听器对象并初始化它
2.添加需要监控的URI前缀
3.开始监听来自客户端的请求
4.处理来自客户端的Http请求
5.关闭HTTP侦听器
例如,我们需要实现一个简单的Http服务,下载文件,或者做一些其他的操作,比如发送邮件,使用HttpListener进行监听,处理邮件队列,避免在网站上等待同步。获取一些缓存的数据等等
使用系统;使用系统。集合。通用;使用系统Linq .使用系统。净值;使用系统。文字;使用系统。穿线;使用系统网络.使用系统IO;使用牛顿英尺.Json命名空间HttpListenerApp {///summary///Httprequest逻辑处理////摘要公共类超文本传送协议(Hyper Text Transport Protocol的缩写)提供程序{私有静态HttpListener httpFiledownload//文件下载处理请求监听私有静态HttpListener httOtherRequest//其他超做请求监听///摘要///开启HttpListener监听////摘要公共静态void Init(){ httpfileddownload=new Httplistener();//创建监听实例httpFiledownload .前缀。添加(' http://10。0 .0 .217:20009/FileManageApi/Download/');//添加监听地址注意是以/结尾httpFiledownload .start();//允许该监听地址接受请求的传入threadthreadhttpfileddownload=新线程(新线程启动(gethttpfileddownload));//创建开启一个线程监听该地址得请求线程文件下载.start();htother request=new Httplistener();httOtherRequest .前缀。添加(' http://10。0 .0 .217:20009/BehaviorApi/EmailSend/');//添加监听地址注意是以/结尾httOtherRequest。start();//允许该监听地址接受请求的传入。
threadthreadhtotherrequest=new Thread(new Thread start(gethtotherrequest));ThreadhttOtherRequest .start();} ///摘要///执行文件下载处理请求监听行为////summary public static void gethttpfileddownload(){ while(true){ HttpListenerContext request context=httpfileddownload .GetContext();//接受到新的请求尝试{//关于上下文为开启线程传入的requestContext请求对象Thread subthread=new Thread(新参数setdsthreadstart)((re context)={ Console .WriteLine(“”执行文件处理请求监听行为');var request=(HttpListenerContext)re context;var image=HttpUtility .UrlDecode(请求请求。查询字符串[' im gname ']);//接受得到请求过来的参数;字符串文件路径=AppDomain .CurrentDomain。基本目录映像;if(!文件。存在(文件路径)){文件路径=AppDomain .当前域。“基本目录”默认值。jpg ';//下载默认图片}使用(FileStream fs=新的FileStream(文件路径,文件模式。打开,文件访问读取){字节[]缓冲区=新字节[fs .长度];fs .读取(缓冲区,0,(整数)fs .长度);//将文件读到缓存区请求回应。状态代码=200请求。响应。标题。添加('访问控制-允许-来源',' * ');请求。响应。content type=' image/jpg ';请求。响应。内容长度64=缓冲区。长度;定义变量输出=请求。响应。输出流;//获取请求流输出。写(缓冲区,0,缓冲区。长度);//将缓存区的字节数写入当前请求流返回输出close();} }));副标题.start(RequestContext);//开启处理线程处理下载文件} catch(Exception ex){ try {请求上下文.回应。StatusCode=500requestContext .响应。内容类型='应用程序/文本;requestContext .响应。内容编码=编码UTF8 .字节[]缓冲=系统。文本。编码。UTF8。GetBytes('系统错误');//对客户端输出相应信息请求上下文.响应。内容长度64=缓冲区。长度;系统。输入输出流输出=请求上下文。响应。输出流;输出。写(缓冲区,0,缓冲区。长度);//关闭输出流,释放相应资源输出close();} catch { } } } } ///summary //执行其他超做请求监听行为////summary public static void gethtotherrequest(){ while(true){ Httplistenercontext request context=Httotherrequest .GetContext();//接受到新的请求尝试{//关于上下文为开启线程传入的requestContext请求对象Thread subthread=new Thread(新参数setdsthreadstart)((re context)={ Console .WriteLine(“”执行其他超做请求监听行为');var request=(HttpListenerContext)re context;var msg=HttpUtility .UrlDecode(请求请求。QueryString['行为']);//接受得到请求过来的参数;//在此处执行你需要进行的操作比如什么缓存数据读取,队列消息处理,邮件消息队列添加等等。
请求回应。状态代码=200请求。响应。标题。添加('访问控制-允许-来源',' * ');请求。响应。content type=' application/JSON ';requestContext .响应。内容编码=编码UTF8 .字节[]缓冲=系统文本。编码。utf8。getbytes(JsonConvert .SerializeObject(new { success=true,behavior=msg });请求。响应。内容长度64=缓冲区。长度;定义变量输出=请求。响应。输出流;输出。写(缓冲区,0,缓冲区。长度);输出close();}));副标题.start(RequestContext);//开启处理线程处理下载文件} catch(Exception ex){ try {请求上下文.回应。StatusCode=500requestContext .响应。内容类型='应用程序/文本;requestContext .响应。内容编码=编码UTF8 .字节[]缓冲=系统。文本。编码。UTF8。GetBytes('系统错误');//对客户端输出相应信息请求上下文.响应。内容长度64=缓冲区。长度;系统。输入输出流输出=请求上下文。响应。输出流;输出。写(缓冲区,0,缓冲区。长度);//关闭输出流,释放相应资源输出close();} catch { } } } }调用方式:注意这里启动程序必须以管理员身份运行,因为上午的监听需要开启端口,所有需要以管理员身份运行。
使用系统;使用系统。集合。通用;使用系统。Linq使用系统。文字;命名空间httplistenerapp { class program { static void main(string[]args)} {//打开侦听HttpProvider的请求。init();}}}执行后的结果是:
这里,通过一个简单的控制程序,使用HttpListener实现了一个简单的Http服务程序。有几个线程和异步处理。例如,当收到行为信息请求时,可以先将其返回给用户,这样用户就可以执行下一个操作,而无需同步等待。例如,实现了一个简单的邮件服务器,它将请求发送给HttpListener,在收到请求后立即返回,并将其交给队列发送邮件。等待邮件发送有延迟,所以不需要等待。
以上就是本文的全部内容。希望对大家的学习有帮助,支持我们。
版权声明:在下通过HttpListener实现简单的Http服务 网是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。