BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / dot-net / #2163同步于 2010/7/13
该镜像源已超过 30 天没有更新,可能在源站已被删除。
dotNET机器人发帖

[抛砖引玉]关于LAN环境下的自部署系统

TimNew
2010/7/13镜像同步17 回复
这几天在打算搞一个公司Intranet环境下的辅助工具系统的框架。 大概设想如下: 每个Utility会以exe的方式发布。 希望在第一运行的时候部署到自动检测本地环境,根据情况自动部署或者升级。 Utility之间可以互相发现(本地互相发现),包括启动起来的和未启动的Utility~ 有些Utility启动以后会常驻~ 新版本发布时,Utility可以检测到,并可以自动更新。 Utility可以发现远程的Utility,然后建立通信~ 存在跨域的问题,因此需要在网关上架设代理服务器,转发数据包~ 综上,整个系统类似于一个Intranet环境下的P2P自维护网络,网络里要负责Message的接力、路由和广播,支持连接和非连接,防火墙友好,支持RPC。 这是一个比较复杂的系统,打算一点点的完善。
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
TimNew机器人#1 · 2010/7/13
今天在处理的问题是依赖注入: 设想的环境需要一种极其松散近乎0耦合的方式来实现Utility之间的依赖。 传统依赖注入,需要发布方和注入方共享某个Contract,于是会导致发布方会和注入方共同依赖于某个DLL。这就违背了设计中每个Utility是单Exe的模式。 因此这种依赖需要摆脱对Contract Interface的依赖。 于是我采取了一种Event Dispatch系统才会运用到的方法级的依赖注入。 即注入的单元不再是类型,Export方的实体是Method体,而Important方的实体则是Delegate类型的Property或者Field~ 为了方便注入匹配的实现~ 我考虑把引入ExportPoint和ImportPoint的概念~ 实现IExportPoint接口,然后根据不同的Method(静态、实例)实现不同的具体ExportPoint~ 同理处理IImportPoint接口,根据类型,实现不同的Property和Field(同样区分静态和实例)对应的ImportPoint~ 具体的注入的方式是扫描Assembly,反射所有的TypeMember,找出Import和Export Attribute,然后形成合适的ImportPoint和ExportPoint实例,加入到Cache当中~必要的时候生成对象实例,并且储存到对象池中。 Assembler扫描Cache,遍历所有的ImportPoint,试图为其找出一个匹配的ExportPoint实例,匹配上就注入。 今天基本实现了这些功能了,明天稳定后,考虑开始加入利用Proxy实现的远端RPC的注入~明天代码整理以后考虑放一部分到论坛来~供大家探讨
wks机器人#2 · 2010/7/14
飞鸽传书?
TimNew机器人#3 · 2010/7/14
【 在 wks 的大作中提到: 】 : 飞鸽传书? : -- : 代做C语言作业,男生勿扰,有意者站内联系。 : ................... 不是~是一个基础平台~当然在这个平台上做个飞鸽是很容易的事情~ 今天跑代码的时候,遇到一些问题~ 嗯~ 在依赖注入后,对象的Activation比较复杂~有static、singleton、new per instance以及new per request的情况~实在是有点复杂~
TimNew机器人#4 · 2010/7/15
【 在 TimNew 的大作中提到: 】 : : 飞鸽传书? : : -- : : 代做C语言作业,男生勿扰,有意者站内联系。 : ................... ExportPoint related Classses:各种ExportPoint 附件(209.9KB) ExportPoint.emf ImportPoint related Classes:各种ImportPoint 附件(353.5KB) ImportPoints.emf Scanners: 扫描器,负责扫描各种类型的注入源,产生ImportPoint和ExportPoint 附件(145.4KB) Scanner.emf Utilities: Extension Methods 附件(52.2KB) Utilities.emf EMF是矢量图,无损缩放
ahomer机器人#5 · 2010/7/15
谈下我对这个问题的看法: 这个task有三部分功能, 1、辅助工具系统的框架:服务器端,客户端。 2、每个utility,每个utility是以exe存在,独立自包含的,它不需要为该辅助工具系统做任何的更改。如果utility互相间要通信,那由单个utility负责。如果utility需要发现是否有程序打开,可以自己简单获取process列表,框架不关心(或者只提供一点小标示)。 3、提供单独的小工具负责网络代理的功能,启动网络代理,这个工具相当于Junifer Network的工具(如果能直接用这个工具,这个步骤可以省略,很多公司会用这个工具进行vpn)。 所以,需要完成的功能是“辅助工具系统的框架”: 1、服务器端 以服务方式存在(WCF),提供软件下载服务、通知client update、更新当前软件列表状态文件。另外,服务器端有一个xml文件,记录所有软件的名字、位置、是否需要框架客户端启动、是否需要客户端update等标识字段。 服务器端如果有文件更新,notify辅助框架客户端方法,自动下载更新软件列表文件并按照。 如果为了保证不下载多余的文件,可以对每个待部署的文件进行md5签名,这样下载时,本地文件跟服务器端的文件md5签名一致,则不下载。 2、辅助框架的客户端,也保存一份xml文件,标识已经部署的utility.exe,记录是否部署成功,以及是否需要更新,当前是否存于运行状态。 然后“客户端”针对这个xml文件,定期更新部署utility.exe,记录utility状态到xml文件中。 下次关机或重启之后,可自动重启辅助框架客户端,根据这个本地xml文件,启动exe, 而启动的方式通过process之类的方法。 如果这样来说的,就是WCF通信的问题了:) 【 在 TimNew 的大作中提到: 】 : 这几天在打算搞一个公司Intranet环境下的辅助工具系统的框架。 : 大概设想如下: : 每个Utility会以exe的方式发布。 : ...................
ahomer机器人#6 · 2010/7/15
框架客户端 也是可以更新的部分,所有需要一个本地的更新程序,进行更新部署,这个更新程序只有download功能。
lixunhuan机器人#7 · 2010/7/15
【 在 TimNew 的大作中提到: 】 : 这几天在打算搞一个公司Intranet环境下的辅助工具系统的框架。 : 大概设想如下: : 每个Utility会以exe的方式发布。 : ................... 可否考虑 .net 现有的技术?
TimNew机器人#8 · 2010/7/15
终于把Unit Test给跑通了~ 真够费劲的~ 呵呵~ 把完整代码先放上来~回头再解释~ Unit Test用了XUnit~可以到 http://xunit.codeplex.com/ 下载 【 在 TimNew 的大作中提到: 】 : 这几天在打算搞一个公司Intranet环境下的辅助工具系统的框架。 : 大概设想如下: : 每个Utility会以exe的方式发布。 : ...................
TimNew机器人#9 · 2010/7/15
【 在 ahomer 的大作中提到: 】 : 谈下我对这个问题的看法: : 这个task有三部分功能, : 1、辅助工具系统的框架:服务器端,客户端。 : ................... 我整理了一下思路: 我觉得框架需要有的功能是 1.方法级别的依赖注入,用于把各个Service和Component耦合起来 2.RPC机能,我在考虑利用依赖注入来实现,已经有一个大概的方案 3.带路由的数据连接,用于传送大规模的数据块或者文件等 4.Service和Component的发现,包括发现未启动的文件或者是内存中的实例 做这个东西目的不在于实现什么功能,或者做出什么东西,而是为了验证一些设计和架构理念~ 因此不打算采用任何现有的平台或者工具。 换句话说,这个项目是一个半调研半工程的项目。放到这里是希望能大家一起讨论设计思路,论证方案的可行性。 目前来说,对于整体的构想,我还没有理出一个比较具体的思路来,不过对于一些细节的东西,我已经有一个大致的方案了。