C#基于websocket-sharp实现简易httpserver(封装)
一、背景
其实就是很简单的,公司会桌面开发的人员紧缺啊,项目又赶,而我们公司的前端人员人多还厉害(ps:吐槽下,后端的人真的少啊,会桌面开发的更少啊),所以萌生出了使用html+js来构建本地应用程序,但是我们的客户基本都是制造行业,需要对很多硬件进行交互(IO卡、PLC、串口等等各种),那就势必还是需要传统的应用程序(毕竟方案多),emmm,那这两者之间需要怎么样结合呢?so就有了本文,让winform变成一个httpserver,这样就可以接入各种硬件以及处理耗时动作,将界面跟业务处理分开,当时这个还是前端人员提出能不能用前端技术构建界面,后面我们一合计,应该是可以试试(ps:大佬们如果有问题请轻拍啊)
二、技术点说明
websocket-sharp
websocket-sharp是开源的websocket的C#封装,可以帮助我们快速构建websocket的相关应用,但是同时它也提供了httpserver的功能,这次选型这个的缘故也是因为有websocket的存在,后续扩展做实时的数据交互应该是非常方便的
其他:
autofac(IOC使用)、json.net(json序列化使用)
三、关注点
如图所示,对于一个自动更新程序,关注点应该都是以上几个点
支持Get以及Post请求,这个应该是基本的(对于其他请求没有进行封装)
依赖注入,还是很好用的,最直观的就是不用写new对象了
异常filter,可以实现全局异常捕获以及处理(服务端开发应该用的比较多)
文件获取,最直观的就是要显示图片咋办
自定义filter,就是平常我们针对于每个action的拦截器(目前还未实现)
大致应该就以上几点,如果实现以上几点,应该可以算是一个像模像样的简陋版httpserver(只支持api访问的那种)
四、设计流程图
一些说明:
1、为了减少依赖,我将websocket-sharp的源码全部放入到MHttpServer项目中,感谢websocket-sharp的作者,可以让我方便的实现httpserver的功能
2、整体流程就如上所示,应该还是比较顺畅,我目前是把自己做服务器端开发时候的一些惯性思路带到这个项目中,有可能会不符合其他人的开发习惯
3、其他具体看github的代码,如果有人想做研究的话
4、程序考虑支持XP,所以将.net framework的版本定在4.0,所以autofac的版本是比较低的,这个如果需要最新版本可以自己去升级
5、整体的开发参照目前WebApi的方式进行,路由规则定为controller/action(例如:User/Add),所以是没有参照restful的标准(实际原因是理解不了Restful怎么应付复杂的http请求场景,例如参数个数类型一样的情况下??)
五、如何使用
新建winform项目后,在需要开启的地方里加入以下代码:
MHttpServer.Listen listen = new MHttpServer.Listen(8088);
ContainerBuilder builder = new ContainerBuilder();
builder.RegisterType().PropertiesAutowired();
listen.InitController(builder);
listen.start();
以上代码是实例化一个httpserver对象,并且将service注入到buid中,将build传入到InitController,通过这种方式实现全局的依赖注入
效果如下:
正常执行,并且触发更新winform的界面,TestDo方法是一个事件,事件中将收到的数据显示在form的richtextbox中
故意触发异常执行:
触发异常执行的时候,如下图所示,进入了ExceptionFilter中,并且将处理过的异常返回到前端
六、总结
这次的实践只是一个新的尝试,如果效果比较好的话,后续对于交互要求比较高的程序,应该都会采用这种方案进行,通过NanUI或者electron构建界面,本地开启httpserver进行硬件的交互以及业务上的数据查询,充分发挥团队中每个人的作用
这个项目中的大部分东西都是第三方开源产品,我只是做了一个封装,所以最后感谢开源这些产品的作者们
由于个人原因,在测试上可能会有所不够,如果有什么bug的话,还请告知,感谢(ps:文字表达弱鸡,多多包涵)
项目地址:https://github.com/Hello-Mango/MHttpServer
作者: Mango
出处: http://www.cnblogs.com/OMango/
关于自己:专注.Net桌面开发以及Web后台开发,开始接触微服务、docker等互联网相关(最近被互联网架构搞的死去活来- -)
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,如有问题, 可站内信告知.
分类: .NET
标签: .net, winform, httpserver
好文要顶 关注我 收藏该文
OMango
关注 - 0
粉丝 - 16
+加关注
5
« 上一篇:【.NetCore】基于jenkins以及gitlab的持续编译及发布
posted @ 2018-09-12 22:56 OMango 阅读(526) 评论(6) 编辑 收藏
评论列表
#1楼 2018-09-13 08:51 高海东
可以用 SignalR
支持(0)反对(0)
#2楼[楼主] 2018-09-13 09:13 OMango
@ 高海东
SignalR记忆中是做消息推送用的,应该不难搭建httpserver吧?
支持(0)反对(0)
#3楼 2018-09-13 09:44 zhang_jun_hong
桌面用DELPHI, QT5,c++,MFC很好的呀,性能很高的。。winform这么多年没有哪个公司用它开发出商业级的应用软件,也许就是一个玩具吧。。
支持(0)反对(0)
#4楼[楼主] 2018-09-13 10:02 OMango
@ zhang_jun_hong
企业内部用的软件用winform的很多啊= =包括很多工控软件,面向toC群体的确实不多,而且这篇文章主要就是因为搭好看的界面麻烦,才使用前端技术构建界面,本地驻留server的方式
支持(0)反对(0)
#5楼 2018-09-13 10:04 蜗牛往前走
现在不是流行使用Electron吗?
支持(0)反对(0)
#6楼[楼主] 2018-09-13 10:42 OMango
@ 蜗牛往前走
Electron奈何不支持xp啊,目前我们用的是NanUI的XP版本,然后结合这个httpserver完成一个程序
支持(0)反对(0)
刷新评论刷新页面返回顶部
注册用户登录后才能发表评论,请 登录 或 注册,访问网站首页。
【推荐】超50万VC++源码: 大型组态工控、电力仿真CAD与GIS源码库!
【免费】要想入门学习Linux系统技术,你应该先选择一本适合自己的书籍
【前端】SpreadJS表格控件,可嵌入应用开发的在线Excel
【直播】如何快速接入微信支付功能
腾讯云
最新IT新闻:
· 陆奇上任后YC中国首步棋:明年H2推本土化项目
· 微软跨平台功能安卓端“Microsoft Apps”更名
· Spotify将离线下载扩大三倍:手机可下一万首歌曲
· iPhone Xs/XR、Apple Watch Series 4 预购已开始 抢货全攻略
· 罗永浩新书《创业在路上》:我死了就在墓碑上写这句话
» 更多新闻...
华为云HC0905
最新知识库文章:
· 为什么说 Java 程序员必须掌握 Spring Boot ?
· 在学习中,有一个比掌握知识更重要的能力
· 如何招到一个靠谱的程序员
· 一个故事看懂“区块链”
· 被踢出去的用户
» 更多知识库文章...
公告
昵称:OMango
园龄:5年10个月
粉丝:16
关注:0
+加关注
我的标签
.net(2)
.NET Core(2)
API网关(1)
docker(1)
httpserver(1)
jenkins(1)
kong(1)
linux(1)
skiasharp(1)
SocketIoClientDotNet(1)
更多
随笔分类
.NET(4)
.NET Core(5)
API网关(1)
deepin
kong(1)
Linux(3)
随笔档案
2018年9月 (1)
2018年3月 (6)
2018年2月 (4)
阅读排行榜
1. .NET Core使用swagger进行API接口文档管理(3140)2. winform自动更新程序实现(2281)3. .NET下使用socket.io随笔记录(1561)4. .NET Core版本七牛云SDK使用(1167)5. .NET Core阿里大于短信发送SDK修改以及使用(1159)
推荐排行榜
1. .NET Core使用swagger进行API接口文档管理(30)
2. winform自动更新程序实现(18)
3. .NET Core版本七牛云SDK使用(6)
4. C#基于websocket-sharp实现简易httpserver(封装)(5)
5. .NET Core阿里大于短信发送SDK修改https://www.cnblogs.com/OMango/p/9637970.html