智能打印SDK-源码剖析

摘要:
尽管到目前为止,市场上已经出现了类似的产品。loopop的新一代云打印也基于基于客户端的HTTP通信。然而,作者认为,将http协议发送到本地服务器的速度并不慢。实现网页将消息发送到本地http程序、本地http程序,并将消息解析发送到新手打印组件。4使用SignalR实现双向通信。并解决跨域访问。8.开源,由开发人员自行开发。不要担心病毒木马。

 演示站点+源码 均在github 

迁徙至github: https://github.com/micro-chen/WebPrinter

 智能打印SDK-官方群 547747202

-----------------过时---------------

开源地址:http://www.dnnode.com/

软件下载地址:http://www.dnnode.com/
在线展示:http://www.dnnode.com/help.html

前面的文章,我写了为什么做这个项目,又为什么开源。

虽然到目前为止,市场上已经出现了类似的产品。比如:lodoop ,Strato WebPrinter

这两个产品都是国产的打印客户端支持。lodoop新一代的云打印,也是基于客户端的HTTP通信作为基础。第二个不知道哪家公司,看了下程序的基本部件,是用java的 serverlet

开启的HTTP本地服务。

虽然lodoop不仅支持http  而且支持https两种协议,但是笔者认为,这种在客户端通信的数据,无所谓使用https协议。因为是本地通信,而不是远程通信。

笔者比较相信阿里的菜鸟打印组件,因为菜鸟新一代的打印组件,对开发者二样,不仅文档全面,而且设计规范很好。基于特定的行业结构,菜鸟官方有自己的模板语言。---

自定义一套xml标签结构和解析架构.xsd。

菜鸟打印组件相当稳定,在批量打印的时候,速度没的说。模板解析速度快。

但是菜鸟没有使用http协议,使用了h5的WebSocket.两者的差别,就不谈了。速度确实也是没法比较。但是,笔者认为,http协议发送到本地Server的速度,也并不慢。毕竟

是在客户端本地,不是远程访问服务器。所以,唯一的瓶颈,大概就是HTTP Server的程序了。

开发本地http程序,绑定端口的方式,有很多语言,node.js /pyhton/c/c++/C#等等。但是笔者选择了C#,因为ASP.NET MVC这种设计十分良好,容易扩展维护,效率也不错。

想到 Owin项目的 微软早期MVC自承载程序--Katana,笔者认为,基于asp.net mvc自承载,然后基于SignalR模拟双向通信,是一项可行的事情。然后就下手了。。。。。。、

好,切入正题,本项目的核心理论基础及时 asp.net  mvc自承载+SignalR 进行的双向通信。

基于的客户端本地运行时,---------------精简版的微软官方的.net framework。(参考前面几篇文章,如何进行精简.net framewok到十几兆!!!)

好的,server 有了 ,双向通信有了,运行时也有了,剩下的就是将各个通道打通琢磨。

下载源码包后:

智能打印SDK-源码剖析第1张

 我们看到有两个sln解决方案文件。请使用2010这个,2015那个是对类库的.net4.5的编译。我们是在.net 4.0下的。为什么选4.0?.net 4.0可以运行在现有的所有的Windows

操作系统上(XP+);

打开解决方案:

智能打印SDK-源码剖析第2张

--------------------------------------------------------------------------------------------------------

关于什么是Owin,微软的Owin实现,请自行找资料,笔者假设,您已经对Owin 项目熟悉。而且,属性微软的asp.net mvc自承载。

1,Owin 的C#实现

2,一个C/C++ 实现的Windows服务,随着windows系统启动。用来唤醒激活本地的http server程序。

  2-1 这个服务的存在的意义是为了防止客户端本地的http server死掉

  2-2 保持开机自启动,避免用户手工自己打开程序,减少使用者的操作步骤,可以让使用者进行傻瓜式的操作。、

3 SmartClient.ServerHost 这个项目是 http server 承载程序,用来做本地的http监听。实现网页将消息发送给本地http程序,本地http程序,将消息解析发送到菜鸟打印组件。

看到这里,各位应该明白,这个http程序的意义,就是做消息转发!

4 SmartClient.Web 这个项目就是一个普通的asp.net mvc4 项目,基于Owin的自承载项目。用来实现http 各种消息路径的定义实现。

在 SmartClient.ServerHost 启动的时候,我们将SmartClient.Web 生成的bin 下面的文件,统一放到 SmartClient.ServerHost 的bin 目录下,然后就能自发现web程序。

原理很简单,从当前的应用程序域 反射 [assembly: OwinStartup(typeof(SmartClient.Web.Startup))] 有这个属性的程序集,找到入口,然后开始加载mvc配置并启动。、

接下来,就跟普通的asp.Net MVC项目的调试一样了。

--------------------------------------------------------------------------------

打包:

智能打印SDK-源码剖析第3张

在源码包中,作者提供了完整的打包工具盒打包脚本。

将圈1中的文件夹拷贝到C盘根目录,使用inno setup打开 圈2的脚本,就能自己打包程序了。

智能打印SDK-源码剖析第4张

每次只需要把程序打包,将windows服务程序放到 C:SpiderPackageFiles 下面替换到旧版本的即可。

---------------------------------------------------------------------------结束-------------------------------------------------------------------------------------

本程序中的亮点,也是难点:

1 CORS跨域支持

2 IE 老板本的跨域的问题

3 在不同的应用程序运行账户中进行角色切换。一个 System账户运行的程序,如何开启 本地管理员登陆账户运行程序。原理就是windows 服务打开本地程序到UI.涉及到程序运行域的通信。跨Session 通信问题。 Windows 服务程序运行在Session 0 ,而用户UI程序在用户的Sesion中。

4 使用SignalR实现双向通信。并解决跨域访问。对老版本的jsonp通信模式,只能进行get 请求的方式,采用消息压缩,将大消息压缩后,可以支持较长的消息数据发送提交。、

5 由于解决了 Windows 服务 开启本地程序的问题。用户所有的 操作,都可以在一个网页上通过http协议进行通信。将传统的操作,统一从网页控制,减少用户使用难度和各种操作系统设置的难度门槛。

6 提供了微软官方的.net framework的精简版的运行时,打包脚本,打包工具,发布简单,只需要把http程序打包成zip或者7z文件即可。安装包自带7z命令行解压工具,大大减少了安装包的体积。

7 内置菜鸟打印组件,即使未安装菜鸟打印组件,使用本程序,依然可以正常打印。

8 开放源码,开发者自行开发。无需担心病毒木马。

写在最后,如何对客户系统的杀毒程序误报的问题。笔者提供两个建议:

1 购买数字证书  对自己的程序数字签名。

2 绕过杀毒程序(怎么绕如何绕,仁者见仁智者见智的了)

3 建议用户关闭杀毒程序 -----恭喜了

免责声明:文章转载自《智能打印SDK-源码剖析》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇《ArcGIS Runtime SDK for Android开发笔记》Jackson 通过自定义注解来控制json key的格式下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

跨平台通信中间件thrift学习【Java版本】(转)

转自:http://neoremind.com/2012/03/%E8%B7%A8%E5%B9%B3%E5%8F%B0%E9%80%9A%E4%BF%A1%E4%B8%AD%E9%97%B4%E4%BB%B6thrift%E5%AD%A6%E4%B9%A0%E3%80%90java%E7%89%88%E6%9C%AC%E3%80%91/ 1. What i...

RTU、DTU、工业网关三者有何区别

随着计算机与传感器技术的发展,能实现检测的数据在电脑上显示,再后来,以太网出现了,延伸了物理传输距离,伴随着 5G/4G/3G 网络、Wi-Fi、蓝牙、zigbee、lora等无线网络传输技术的出现,这么多技术?怎么办,网关能解决,网关能够适配更多协议标准,网关是一个翻译器,对收到的信息要重新打包,实现数据的转换。 举个更简单比喻来说明网关,你想从一个房间...

websocket通信 h5flash 兼容ie

H5新功能websocket不用说了,现代浏览器都支持,拿起来就可以用。接下来主要分享下socket通信兼容ie: 方案:flash socket; 前段代码:https://github.com/gimite/web-socket-js; 主要用到里面的3个文件:swfobject.js;web_socket.js;WebSocketMain.swf/W...

Android使用NFC模拟M卡实现 (二)

  Android使用NFC模拟M卡实现 (一)Android使用NFC模拟M卡实现 (二)Android使用NFC模拟M卡实现 (三)   前几天写的第一篇关于NFC的官方文档的翻译,今天才更新第二篇。没等我更新,就有人留言,具体怎么实现了! 我写文章不易,你搜索也不易,进行了,就请细看,细读。不会让你失望,失望没懂的地方,请留言 ! 这里应该是写总结,...

SPI通信协议(非原创,转载他人,用于学习)

SPI通信协议:1、SPI主从模式;2、数据信号的相位与极性;3、数据帧的格式。 一、什么是SPI? SPI是串行外设接口(Serial Peripheral Interface)的缩写。是 Motorola 公司推出的一 种同步串行接口技术,是一种高速的,全双工,同步的串行通信总线。 二、SPI优点支持全双工通信通信简单数据传输速率块 三、缺点没有指定的...

Android串口通讯

今天在整一个项目,需要利用串口通讯在网上看了好多人的帖子才稍微整出了一点头绪。 首先串口代码就是利用谷歌自己的api,将java代码放在java/android_serialport_api目录下,如果你想改变这个报名需要用jni重新生成so文件,在这里我是直接使用这个包名来简化工作。 androidStudio的结构如下: so文件: 在gradle...