开源地址: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 有了 ,双向通信有了,运行时也有了,剩下的就是将各个通道打通琢磨。

下载源码包后:

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

操作系统上(XP+);

打开解决方案:

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

关于什么是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项目的调试一样了。

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

打包:

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

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

每次只需要把程序打包,将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 开放源码,开发者自行开发。无需担心病毒木马。

智能打印SDK-源码剖析的更多相关文章

  1. jQuery之Deferred源码剖析

    一.前言 大约在夏季,我们谈过ES6的Promise(详见here),其实在ES6前jQuery早就有了Promise,也就是我们所知道的Deferred对象,宗旨当然也和ES6的Promise一样, ...

  2. STL"源码"剖析-重点知识总结

    STL是C++重要的组件之一,大学时看过<STL源码剖析>这本书,这几天复习了一下,总结出以下LZ认为比较重要的知识点,内容有点略多 :) 1.STL概述 STL提供六大组件,彼此可以组合 ...

  3. Node 进阶:express 默认日志组件 morgan 从入门使用到源码剖析

    本文摘录自个人总结<Nodejs学习笔记>,更多章节及更新,请访问 github主页地址.欢迎加群交流,群号 197339705. 章节概览 morgan是express默认的日志中间件, ...

  4. 【转载】STL"源码"剖析-重点知识总结

    原文:STL"源码"剖析-重点知识总结 STL是C++重要的组件之一,大学时看过<STL源码剖析>这本书,这几天复习了一下,总结出以下LZ认为比较重要的知识点,内容有点 ...

  5. STL源码剖析 迭代器(iterator)概念与编程技法(三)

    1 STL迭代器原理 1.1  迭代器(iterator)是一中检查容器内元素并遍历元素的数据类型,STL设计的精髓在于,把容器(Containers)和算法(Algorithms)分开,而迭代器(i ...

  6. STL"源码"剖析

    STL"源码"剖析-重点知识总结   STL是C++重要的组件之一,大学时看过<STL源码剖析>这本书,这几天复习了一下,总结出以下LZ认为比较重要的知识点,内容有点略 ...

  7. (升级版)Spark从入门到精通(Scala编程、案例实战、高级特性、Spark内核源码剖析、Hadoop高端)

    本课程主要讲解目前大数据领域最热门.最火爆.最有前景的技术——Spark.在本课程中,会从浅入深,基于大量案例实战,深度剖析和讲解Spark,并且会包含完全从企业真实复杂业务需求中抽取出的案例实战.课 ...

  8. 老李推荐:第8章7节《MonkeyRunner源码剖析》MonkeyRunner启动运行过程-小结

    老李推荐:第8章7节<MonkeyRunner源码剖析>MonkeyRunner启动运行过程-小结   poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性 ...

  9. 老李推荐:第8章5节《MonkeyRunner源码剖析》MonkeyRunner启动运行过程-运行测试脚本

    老李推荐:第8章5节<MonkeyRunner源码剖析>MonkeyRunner启动运行过程-运行测试脚本   poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化 ...

  10. 老李推荐:第8章1节《MonkeyRunner源码剖析》MonkeyRunner启动运行过程-运行环境初始化

    老李推荐:第8章1节<MonkeyRunner源码剖析>MonkeyRunner启动运行过程-运行环境初始化   首先大家应该清楚的一点是,MonkeyRunner的运行是牵涉到主机端和目 ...

随机推荐

  1. Jconsole连接远程服务器

    本地服务器.win7,安装JDK8 远程服务器:centos6.5 ,tomcat7,java8 配置方法: 1)修改远程服务器的~/tomcat/bin/catalina.sh  文件 在 # -- ...

  2. JDK8新特性面试

    java8:http://ifeve.com/java-8-features-tutorial/ 一.Lambda表达式和函数式接口 Lambda表达式(也叫做闭包) 它允许我们将一个函数当作方法的参 ...

  3. Python第三天 序列 数据类型 数值 字符串 列表 元组 字典

    Python第三天 序列  数据类型  数值  字符串  列表  元组  字典 数据类型数值字符串列表元组字典 序列序列:字符串.列表.元组序列的两个主要特点是索引操作符和切片操作符- 索引操作符让我 ...

  4. ipyparallel 中的 pi的求法

    1.PI的求法的数学依据 如图,可以看见在边长为1的正方形里面,有一个1/4圆,我们随机在正方形中取点,点在圆内的概率和点在正方形内的概率之比正好为两者的面积之比.这样就有在圆内的点的数目比所有点的数 ...

  5. --@angularJS--浅谈class与Ng-Class的应用

    1.angularjs的表达式是可以写在class里面动态改变其值的,写法如下: □.CSS1.html: <!doctype html><html ng-app="MyC ...

  6. Div里面载入另一个页面的实现(取代框架)(AJax)

    随着框架越来越不火了,HTML5就不对框架支持了,iframe也只有url了,Div就担当了此大任 DIV+CSS在页面部局确实也很让人满意,使用也更方便 今天突然遇到一个问题,那就是需要导入另一个页 ...

  7. Objective-C 关于静态方法与实例方法的转载

    objective-c中非常重要的语法知识,在此归纳总结一下. 类方法,也称静态方法,指的是用static关键字修饰的方法.此方法属类本身的方法,不属于类的某一个实例(对象).类方法中不可直接使用实例 ...

  8. Nodejs.sublime-build 在sublime3中的配置

    { "cmd": ["node", "$file"], "file_regex": "^[ ]*File \& ...

  9. abstract、override、new、virtual、sealed使用和示例

    abstract修饰类名为抽象类,修饰方法为抽象方法.如果一个类为抽象类,则这个类智能是其他某个类的基类.抽象方法在抽象类中没有函数体.抽象类中的抽象方法是没有方法体的,继承其的子类必须实现抽象类的抽 ...

  10. loadrunner controller:设置多个load generator

      下面讲一下如何使用多台电脑进行负载测试. 1)         打开load generator,如图所示默认已添加了我们本地的Generator: 2)         点击"Add. ...