MIS系统开发利器,快速的字典录入解决方案,另类的、可管理的.NET DataWindow

by 魏琼东 2013.12.18 13:37
一、前言      AgileEAS.NET SOA 中间件平台是一款基于基于敏捷并行开发思想和Microsoft .Net构件(组件)开发技术而构建的一个快速开发应用平台。用于帮助中小型软件企业建立一条适合市场快速变化的开发团队,以达到节省开发成本、缩短开发时间,快速适应市场变化的目的。      AgileEAS.NET SOA中间件平台提供了敏捷快速开发软件工程的最佳实践,通过提供大量的基础支撑功能如IOC、ORM、SOA、分布式体系及敏捷并发开发方法所支撑的插件开发体系,以及提供了大量的实体、数据模型设计生成工具、代码生成工具,用于帮助中小软件开发商快速成长。      AgileEAS.NET平台充分把握目前软件行业快速发展的新趋势,基于敏捷并行开发、快速适应市场这样淳朴的软件工程实践,采用业界广泛使用的Microsoft .Net构件(组件)开发技术实践了这种开发思想,帮助软件企业实现“敏捷变化、快速适合”的目标,从而帮助软件企业在激烈的市场竞争中赢得先机并获得更高的回报。 二、管理信息系统开发之中的字典选择录入问题      AgileEAS.NET SOA中间件平台被广泛的应用于MIS类系统之中,可以说基于AgileEAS.NET SOA中间件开发MIS类真是得天读后,能大大的降低系统的开发难度和开发工作量。      有管理信息系统开发之中有很大一部分工作是实现界面的数据选择录入,比如商品进销存之中的根据输入码、拼音码、检索码查出某部分字典数据并且选择录入,如下图:      这是一个典型的字典选择输入应用,此类应用大量应用于比如像采购入库、采购申请之中的选择要采购的商品信息,商品信息存储在商品字典,本案例是选择药品字典信息,选择录入药品字典信息以便于进行药品入库业务处理。      在传统的此类应用开发过程之中我们需要自己处理当输入焦点在检索文本框之中进行输入的输入事件以及大量的界面、数据检索处理工具,费时费力,如果一个界面之中多出这样几个此类的应用场景,那么这个插件的代码的70%或者以上都用于应对此类场景,就形成了一种代码超长、界面控件、输入控件的事件处理麻烦的境界,如以下这个界面:      这个界面之中有五处此类场景的应用,当然,在一些应用之中可能有十个或者更多的这种场景,整个模块在应对此类情况的代码极其之中,也会慢慢的导致代码的可读性,可维护性越来越差。 三、TextBoxAutoComplete组件      AgileEAS.NET SOA中间件平台在经过多年痛苦的开发应用之中,从各种客户的反馈和开发应用的经验之中积累了一套解决此问题的方案,并创造性的实现了一个基于输入文本框的扩展解决方案,TextBoxAutoComplete组件及其之后的InputDict(输入字典)管理体系。      TextBoxAutoComplete组件:根据其名称我们可以简单的理解为TextBox的自动完成组件,那么其功能就是类似于baidu、google的搜索文本框功能:      TextBox控件配合TextBoxAutoComplete完成类似上图你的自动完成检索功能,只不过baidu、google的搜索文本框展示的是搜搜索关键字,而AgileEAS.NET SOA中间件平台之中的TextBoxAutoComplete展现的是各种字典的录入选择表格,如下图:      TextBox控件配合TextBoxAutoComplete可以完成对任意类型的字典信息的检索录入和自动完成功能。 四、输入字典管理      如果说要实现对任意类型的字典信息的检索录入和自动完成功能,仅TextBoxAutoComplete组件是不够的,为什么呢, 这会涉及到各类输入字典的录入数据规则、检索规则、数据窗口(DataWindow)的数据显示、排序规则、以及对数据源的过滤规则等等。      那么如何解决此问题呢,AgileEAS.NET SOA中间件平台提供了一个字典管理功能“输入字典”:      系统中维护着一组用于控制TextBoxAutoComplete组件的数据检索、显示的各项参数,其中包括如下重要信息:      字典编码:字典编码是一个Guid类型的值,其值必须是唯一的,也早用于控制TextBoxAutoComplete进行重要的重要依据,也是维系TextBox控件与TextBoxAutoComplete的唯一纽带。      数据类型:TextBoxAutoComplete组件工作是所依赖的AgileEAS.NET SOA中间件ORM实体对象类型,即输入字典的数据检索、显示必须依赖于ORM实体对象。      显示参数:数据窗口(DataWindow)的宽度、高度和每次可显示的记录行数。      是否启用缓存:即输入字典的检索行为是基于数据缓存进行的还是基于数据库检索进行的,因为我们的处理很多不常见化的字典信息,比如民族、省份这样的信息不会经常发生变化,AgileEAS.NET SOA中间件平台设计一套基于时间戳的实体缓存体系,如果选择启去缓存,只自动完成的检索不会请求数据库操作,以减少通信和数据库原因,如果选择启用了缓存,则必须要设定缓存属性。      缓存属性:用于控件缓存的增量更新的一个日期时间型字段/实体数据,并且必须在ORM实体的这个属性上面加上CacheUpdated标记: 1: /// <;summary> 2: /// 最后更新时间 。 3: /// <;/summary> 4: [Column("LMTime", "最后更新时间"),CacheUpdated] 5: [DisplayName("最后更新时间")] 6: public DateTime LMTime 7: { 8: get; 9: set; 10: }      并且需要在对就的字典管理/维护程序这中,当增加、修改某一行字典记录之后需要把对应的字段时间更新为最新的修改时间,那么缓存系统就会在一定的延迟规则之后获得这一更新记录。      显示属性:当TextBoxAutoComplete组件完成选择录入之后,显示在关联文本框内的值对应的ORM属性。      缓存间隔:输入字典记录本身的缓存间隔,即TextBoxAutoComplete引擎从数据库中更新对应的字典定义的周期,最小为0分钟,即TextBoxAutoComplete直接读取数据库中的字典记录。      码值属性:当TextBoxAutoComplete组件完成选择录入之后,用于执行其他业务的字典编码属性,一般情况下为字典的主键属性。      显示设置:用于设置DataWindow(数据窗口)之中显示的列信息记录,包括显示那些列、列标题、显示顺序等:      数据源筛选:在数据根据输入的条件检索之前的数据筛选功能:      上图的筛选条件表示仅选择Icd10bksn值为“B”的记录。      搜索条件:用于定制TextBoxAutoComplete组件在经过筛选之后的数据源上的检索行为,例如本文第二张图上的输入的“ys”之后的数据源检索行为:      目前倒提供基于字符串字段的三种检索条件:StartsWith(like ‘ys%’)、EndsWith(like ‘%ys’)和Contains(like ‘%ys%’),基本上能满足99的应用。 五、开发过程      首先我们要有规划,定将好数据实体、在必须的实体上定将好缓存更新标记,最新版本的ORM设计器提供了支持,我们就以DrugShop案例之中的药品字典实体以及在药品入库的录入检索为例进行说明。      药品字典我们考虑使用缓存,即把药品字典缓存在本地,以减少对服务器的请求和通信压力,以下是药品字典人的定义:      其中LMTime为最后更新时间,用于控制缓存的增量更新。      当然需要注意的是,并不是所有的输入字典信息都需要从缓存之中读取,对于实时可变的录入信息,如高品库存信息必须要进行实时读取,就没有必要使用缓存,因为对于这些实时数据,实体缓存的准确率非常之低。      设计好ORM实体模型并且生成代码、编译实体程序集之后,我们使用AgileEAS.NET平台的输入字典创建一个新的输入字典:        打上启用缓存复选框、选择设置缓存属性、码值属性、显示属性如下:      选择显示属性如下:        设置搜索条件如下:      复制下字典的编码,并且保存这个字典设置,接下来我们使用VS打开程序,在药品入库功能之中使用刚才定义好的字典,首页我们概引用平台的EAS.Data.Controls.dll程序集,并且在工具栏之中添加选择项=》选择EAS.Data.Controls.dll程序集,确保把TextBoxAutoComplete组件加载到工具箱之中:      然后我们像界面拖入TextBoxAutoComplete组件,完成后如下:      然后我们设计检索文本框txtSeach的属性如下:      这地方最重要的就是设计TextBox基于TextBoxAutoComplete1组件扩展出来的属性MetadateID,即扩展录入元数据ID,关联自我们定义好的输入字典。      是不是很简单,定义一个输入字典,程序代码之中只需要拖入一个组件,设计一个ID,即完成了需要大量编码才能完成的工具,名至实归的快速开发利器。 六、执行验证      我们编译并且启动DrugShop.Main.exe,使用0001密码sa登录,打开药品入库功能,来试一下是否能够执行自动完成:      OK,使用正常,没有任何问题。      DrugShop案例之中同步提供了本例子的字典定义和使用代码,请大家通过AgileEAS.NET SOA中间件官方网站的最新下载栏目进行下载。 七、联系我们      为完善、改进和推广AgileEAS.NET而成立了敏捷软件工程实验室,是一家研究、推广和发展新技术,并致力于提供具有自主知识产权的业务基础平台软件,以及基于业务基础平台开发的管理软件的专业软件提供商。主要业务是为客户提供软件企业研发管理解决方案、企业管理软件开发,以及相关的技术支持,管理及技术咨询与培训业务。      AgileEAS.NET SOA中间件平台自2004年秋呱呱落地一来,我就一直在逐步完善和改进,也被应用于保险、医疗、电子商务、房地产、铁路、教育等多个应用,但一直都是以我个人在推广,2010年因为我辞职休息,我就想到把AgileEAS.NET推向市场,让更多的人使用。      我的技术团队成员都是合作多年的老朋友,因为这个平台是免费的,所以也没有什么收入,都是由程序员的那种理想与信念坚持,在此我感谢一起奋斗的朋友。 团队网站:http://www.agilelab.cn, AgileEAS.NET网站:http://www.smarteas.net 官方博客:http://eastjade.cnblogs.com QQ:47920381,AgileEAS.NET QQ群:113723486(AgileEAS SOA 平台)/上限1000人 199463175(AgileEAS SOA 交流)/上限1000人 212867943(AgileEAS.NET研究)/上限500人 147168308(AgileEAS.NET应用)/上限500人 172060626(深度AgileEAS.NET平台)/上限500人 116773358(AgileEAS.NET 平台)/上限500人 125643764(AgileEAS.NET探讨)/上限500人 193486983(AgileEAS.NET 平台)/上限500人 邮件:james@agilelab.cn,mail.james@qq.com, 电话:18629261335。

Tags:

.NET | AgileEAS.NET | C# | ESB | ORM | SAAS | SOA | Socket | 中间件 | 云计算 | 分布式 | 消息中间件 | 框架

如何使用DotNetBar制作漂亮的WinFrom界面,同步学习如何自定义AgileEAS.NET SOA中间件平台WinClient主界面

by 魏琼东 2013.12.17 18:11
一、前言      AgileEAS.NET SOA 中间件平台是一款基于基于敏捷并行开发思想和Microsoft .Net构件(组件)开发技术而构建的一个快速开发应用平台。用于帮助中小型软件企业建立一条适合市场快速变化的开发团队,以达到节省开发成本、缩短开发时间,快速适应市场变化的目的。      AgileEAS.NET SOA中间件平台提供了敏捷快速开发软件工程的最佳实践,通过提供大量的基础支撑功能如IOC、ORM、SOA、分布式体系及敏捷并发开发方法所支撑的插件开发体系,以及提供了大量的实体、数据模型设计生成工具、代码生成工具,用于帮助中小软件开发商快速成长。      AgileEAS.NET平台充分把握目前软件行业快速发展的新趋势,基于敏捷并行开发、快速适应市场这样淳朴的软件工程实践,采用业界广泛使用的Microsoft .Net构件(组件)开发技术实践了这种开发思想,帮助软件企业实现“敏捷变化、快速适合”的目标,从而帮助软件企业在激烈的市场竞争中赢得先机并获得更高的回报。 二、关于WinClient的外挂资源体系介绍      最初版本的AgileEAS.NET SOA中间件平台的运行容器/外壳是没有界面替换体系,最初只是提供了替换关键部分的图片、文字的功能,随着AgileEAS.NET SOA中间件被众多的客户应用到各行各业之后,我们从客户的应用反馈之中进行了大量的重构,其中运行容器也越来越开放,从最初令开放替换部分图片到慢慢开放可以自由修改其他的导航栏、Banner、状态栏、菜单、登录界面、关于界面,发生了很大的变化,同步我们也提供了Desktop、MDI、Dockable等多种界面风格,可以说客户有更我的选择了。      随着更多软件企业或组织加入应用AgileEAS.NET SOA中间件行业,有许多的客户已经不能满足于在这几种风格之中进行选择,希望能给自己最大的自定义空间和范围,提供了更换主界面的需求,我们积极的响应这种需求,并且提出了相关的解决方案,并且在2012年AgileEAS.NET SOA 5.0版本的时间向大家提供。      主界面替换被某一些我们服务于的客户所使用,但是对于广大的关心AgileEAS.NET SOA中间件的朋友来说,并不能得到我们细致并且一对一的服务,因为我们还没有变此部分内容给大家做过介绍和在公开的案例之中提供,所以对于社区之中的很多朋友来说,还能灵活的应用本部分内容。      下图是一个典型的AgileEAS.NET SOA中间件平台WinClient容器的主界面:      其中包含以下组成部分:      主菜单:界面最上部的主菜单,系统、视图和帮助。      导航菜单:通过菜单之中的菜单项可以打开指点的功能模块。      导航栏:同系统导航菜单、以树形或者其他形式展示。      状态栏:显示系统的一些状态信息,如操作消息、当前登录信息等。      内容区:除以上项目外的界面空白区域为业务工作区,即模块插件的工作区域,新打开的模块在经区域显示和工作。      启始页:特指工作区之中第一个打开的模块,当系统登录完成之后会自动打开一个模块,此模块称为起始页模块。 三、IResource接口      AgileEAS.NET SOA 中间件平台为了应用对运行容器的各个部分进行自定义和扩展,提供了一个资源接口IResource: 1: using System; 2:  3: namespace EAS.Explorer 4: { 5: /// <summary> 6: /// 运行容器的外壳资源。 7: /// </summary> 8: public interface IResource 9: { 10: /// <summary> 11: /// 获取应用系统的图标,用于替换主界面的图标。 12: /// </summary> 13: System.Drawing.Icon GetMainIcon(); 14:  15: /// <summary> 16: /// 获取默认的模块图标,用于简约、经典风格的Tab页图标显示,也用于Desktop模式的桌面图标显示。 17: /// </summary> 18: System.Drawing.Image GetModuleIcon(); 19:  20: /// <summary> 21: /// 获取桌面背景图像,用于Desktop模式的桌面模块。 22: /// </summary> 23: System.Drawing.Image GetDesktopImage(); 24:  25: /// <summary> 26: /// 获取应用系统的导航控件,用于替换平台的导航控件。 27: /// </summary> 28: /// <returns>WinForm/WPF用户控件。</returns> 29: object GetNavigationControl(); 30:  31: /// <summary> 32: /// 获取应用系统的Banner控件,用于替换平台的Banner条。 33: /// </summary> 34: /// <returns>WinForm/WPF用户控件。</returns> 35: object GetBannerControl(); 36:  37: /// <summary> 38: /// 获取应用系统的Bottom控件,用于替换平台的状态栏。 39: /// </summary> 40: /// <returns>WinForm/WPF用户控件。</returns> 41: object GetBottomControl(); 42:  43: /// <summary> 44: /// 获取WinForm/WPF容器的关于对话框,用于替换平台的关于对话框。 45: /// </summary> 46: /// <returns>WinForm/WPF窗体。</returns> 47: object GetAboutForm(); 48:  49: /// <summary> 50: /// 获取WinForm/WPF容器的主界面,用于替换平台的主界面。 51: /// </summary> 52: /// <returns>WinForm/WPF窗体。</returns> 53: object GetMainShell(); 54:  55: /// <summary> 56: /// 获取WinForm/WPF/Silverlight容器的登录对话框,用于替换平台的登录对话框。 57: /// </summary> 58: /// <returns>WinForm/WPF/Silverlight窗体。</returns> 59: ILoginForm GetLoginForm(); 60:  61: /// <summary> 62: /// 获取WinForm/WPF容器的起始页/初始模块,用于替换平台的起始页。 63: /// </summary> 64: /// <returns>WinForm/WPF用户控件。</returns> 65: object GetStartModule(); 66:  67: /// <summary> 68: /// 获取系统的名称,显示在运行环境的导航栏。 69: /// </summary> 70: /// <returns>应用系统名称。</returns> 71: string GetApplicationName(); 72:  73: /// <summary> 74: /// 获取系统的标题,显示在运行环境的主窗口之上。 75: /// </summary> 76: /// <returns>应用系统名称。</returns> 77: string GetApplicationTitle(); 78:  79: /// <summary> 80: /// 是否显示主菜单。 81: /// </summary> 82: bool DisplayMainMenu 83: { 84: get; 85: } 86:  87: /// <summary> 88: /// 是否显示导航工具条。 89: /// </summary> 90: bool DisplayNavigationTool 91: { 92: get; 93: } 94: } 95: }      实现AgileEAS.NET SOA 平台的资源替换即是实现IResource接口的过程,在我们DrugShop、SmartERP案例之中都有对应的实现项目DrugShop.Res和SmartERP.Res。      当然,光实现IResource还不购,还需要修改系统的配置文件,以便让资源生效: 1: <;!--资源--> 2: <object name="EAS.Explorer.Resource" assembly="DrugShop.Res" type="DrugShop.Res.Resources" LifestyleType="Singleton"/>      需要注意的是在EAS.Explorer.dll程序集之中还定义了以下两个接口,INavigation接口: 1: using System; 2: using System.Collections.Generic; 3: using System.Linq; 4: using System.Text; 5: using System.Text.RegularExpressions; 6: 7: namespace EAS.Explorer 8: { 9: /// <;summary> 10: /// 导航控件接口。 11: /// <;/summary> 12: public interface INavigation 13: { 14: /// <;summary> 15: /// 初始化导航。 16: /// <;/summary> 17: /// <;param name="m_GroupList">导航清单。</param> 18: /// <;param name="m_ModuleList">模块清单。</param> 19: void Initialize(IList<;INavigateGroup> m_GroupList, IList<INavigateModule> m_ModuleList); 20: } 21: }      ILoginForm接口: 1: using System; 2: using System.Collections.Generic; 3: using System.Linq; 4: using System.Text; 5:  6: namespace EAS.Explorer 7: { 8: /// <;summary> 9: /// 定义登记对话框接口,用于实现自定义登录。 10: /// <;/summary> 11: public interface ILoginForm 12: { 13: /// <;summary> 14: /// 是否已经通过登录验证。 15: /// <;/summary> 16: bool Passed { get; } 17: } 18: }      自定义的导航控件必须实现INavigation接口,以便于平台实现导航的初始化,方法Initialize由平台调用,传入当前系统登录人员所具有权限的模块清单及相关的导航清单。      自定我的登录界面必须实现ILoginForm,以便于系统判定登录界面是否完成了登录验证。 四、IMainShell接口和自定义主界面      第三节在介绍IResource接口的时候我们会发现其他有一个GetMainShell()方法,其用于获取资源实现之中的主界面定义,系统主界面必须是一个Form并且要实现IMainShell接口: 1: using System; 2: using System.Collections.Generic; 3: using System.Linq; 4: using System.Text; 5:  6: namespace EAS.Explorer 7: { 8: /// <;summary> 9: /// 定义主界面接口,用于实现自定义主界面。 10: /// <;/summary> 11: public interface IMainShell 12: { 13: /// <;summary> 14: /// 初始化主界面,根据平台传入的模块清单和相关的导航分组初始化主界面。 15: /// <;/summary> 16: /// <;param name="m_GroupList">导航清单。</param> 17: /// <;param name="m_ModuleList">模块清单。</param> 18: void InitializeShell(IList<;INavigateGroup> m_GroupList, IList<INavigateModule> m_ModuleList); 19:  20: /// <;summary> 21: /// 加载/打开指定模块,响应系统的模块打开操作。 22: /// <;/summary> 23: /// <;param name="module">模块实例。</param> 24: void OpenModule(object module); 25: 26: /// <summary> 27: /// 关闭当前模块(活动的模块)。 28: /// <;/summary> 29: void CloseModule(); 30: 31: /// <summary> 32: /// 关闭指定模块。 33: /// <;/summary> 34: /// <;param name="module">模块实例。</param> 35: void CloseModule(object module); 36: 37: /// <summary> 38: /// 切换导航,展开、隐藏导航,主界面没有导航的隐藏、展开需求可以不处理。 39: /// <;/summary> 40: void SwitchNavigation(); 41: 42: /// <summary> 43: /// 当前活动插件/模块。 44: /// <;/summary> 45: object ActiveAddIn 46: { 47: get; 48: } 49:  50: /// <;summary> 51: /// 已打开的插件/模块集合。 52: /// <;/summary> 53: List<;object> AddIns 54: { 55: get; 56: } 57: } 58: }      其中InitializeShell方法:用于平台传入当前系统登录人员所具有权限的模块清单及相关的导航清单,由自定义界面实现界面的初始化。      OpenModule方法:用于实现对模块的打开,平台传入要打开的模块,由主界面进行处理,实现主界面对模块的动态加载。      CloseModule方法:用于关闭已经打开的模块,并对界面进行清理。      SwitchNavigation方法:切换导航,展开、隐藏导航,主界面没有导航的隐藏、展开需求可以不处理。      ActiveAddIn属性:向平台返回当前的活动模块。      AddIns属性:向平台返回已加载的模块清单。 四、自定义界面实例      近期 有朋友建议使用devcomponents或者DotNetBar为大家演示一下如何自定义平台的主体界面,参考了网有对devcomponents和DotNetBar相关的资料之后我们选择了较为轻量级的DotNetBar为大家演示如何替换系统的主界面。      我们使用DotNetBar所提供的一些控件实现了以下三种风格的主体界面:      第一种是Win7/Ribbon风格的主界面RibbonShell,如下图所示:      其对应代码为DrugShop案例之中的DrugShop.Res项目之中的RibbonShell.cs程序文件。      第二种为类似Visual Studio界面风格的DockableShell,其效果如下:      其对应代码为DrugShop案例之中的DrugShop.Res项目之中的DockableShell.cs程序文件。      第三种为不包含导航栏的简单MDI界面风格的TabShell,其效果如下:      其对应代码为DrugShop案例之中的DrugShop.Res项目之中的TabShell.cs程序文件。 五、关于代码      以上介绍了三种风格的自定义主界面的例子,例子不多,也不复杂,或许也不能满足所有人的美观度需求和功能需求,其目的在于抛砖引用,希望借此文让更多的开发者加入到我们的行列之中来,做出更加美观大方的界面。      关于以上三种风格自定义界面代码,我们已经合并到DrugShop案例和SmartEPR案例之中,请大家在AgileEAS.NET SOA中间件官方网站的最新下载栏目进行下载。      在启动自定义界面的过程之中切记要修改资源项目之中IResource的实现代码之中的GetMainShell方法代码: 1: public object GetMainShell() 2: { 3: return new RibbonShell(); //Ribbon风格自定义界面。 4: //return new DockableShell(); //Dockable风格自定义界面。 5: //return new TabShell(); //TabMdi风格自定义界面。 6: //return null; //使用AgileEAS.NET SOA平台自带界面。 7: }      本文所使用的是DotNetBar115版本,有关于DotNetBar115请通过http://112.74.66.105/downloads/DotNetBar115.rar下载。 六、联系我们      为完善、改进和推广AgileEAS.NET而成立了敏捷软件工程实验室,是一家研究、推广和发展新技术,并致力于提供具有自主知识产权的业务基础平台软件,以及基于业务基础平台开发的管理软件的专业软件提供商。主要业务是为客户提供软件企业研发管理解决方案、企业管理软件开发,以及相关的技术支持,管理及技术咨询与培训业务。      AgileEAS.NET SOA中间件平台自2004年秋呱呱落地一来,我就一直在逐步完善和改进,也被应用于保险、医疗、电子商务、房地产、铁路、教育等多个应用,但一直都是以我个人在推广,2010年因为我辞职休息,我就想到把AgileEAS.NET推向市场,让更多的人使用。      我的技术团队成员都是合作多年的老朋友,因为这个平台是免费的,所以也没有什么收入,都是由程序员的那种理想与信念坚持,在此我感谢一起奋斗的朋友。 团队网站:http://www.agilelab.cn, AgileEAS.NET网站:http://www.smarteas.net 官方博客:http://eastjade.cnblogs.com QQ:47920381,AgileEAS.NET QQ群:113723486(AgileEAS SOA 平台)/上限1000人 199463175(AgileEAS SOA 交流)/上限1000人 212867943(AgileEAS.NET研究)/上限500人 147168308(AgileEAS.NET应用)/上限500人 172060626(深度AgileEAS.NET平台)/上限500人 116773358(AgileEAS.NET 平台)/上限500人 125643764(AgileEAS.NET探讨)/上限500人 193486983(AgileEAS.NET 平台)/上限500人 邮件:james@agilelab.cn,mail.james@qq.com, 电话:18629261335。

Tags:

.NET | ActiveX | ESB | ORM | SOA | SAAS | 中间件 | 框架 | 消息中间件 | 通信框架

基于AgileEAS.NET SOA 平台SAAS架构技术的开源分销ERP系统-SmartERP.NET下载配置说明

by 魏琼东 2013.11.11 13:38
一、前言      AgileEAS.NET SOA 中间件平台是一款基于基于敏捷并行开发思想和Microsoft .Net构件(组件)开发技术而构建的一个快速开发应用平台。用于帮助中小型软件企业建立一条适合市场快速变化的开发团队,以达到节省开发成本、缩短开发时间,快速适应市场变化的目的。      AgileEAS.NET SOA中间件平台提供了敏捷快速开发软件工程的最佳实践,通过提供大量的基础支撑功能如IOC、ORM、SOA、分布式体系及敏捷并发开发方法所支撑的插件开发体系,以及提供了大量的实体、数据模型设计生成工具、代码生成工具,用于帮助中小软件开发商快速成长。      AgileEAS.NET平台充分把握目前软件行业快速发展的新趋势,基于敏捷并行开发、快速适应市场这样淳朴的软件工程实践,采用业界广泛使用的Microsoft .Net构件(组件)开发技术实践了这种开发思想,帮助软件企业实现“敏捷变化、快速适合”的目标,从而帮助软件企业在激烈的市场竞争中赢得先机并获得更高的回报。 二、关于SmartERP.NET        SmartERP.NET 是一套简单的电脑耗材分销ERP系统,其实说是ERP系统还有点夸张,但是最初的开发者都已经这么叫了,那么我们也就也就这么理解吧,SmartERP.NET 原本是我们的一个客户在2011年为其一个客户/朋友开发的一套软件,当时客户人员的开发都是以VB6.0进行开发,客户打算把开发语言换到C#上,基于我们平台进行技术预研,并且打算基于AgileEAS.NET SOA中间件平台进行应用开发,正好当然有一个朋友是做某品牌电脑大区经销的,双方双有所需,正好就基于我们AgileEAS.NET SOA中间件开发了这套简单的ERP系统,其目的有两个,一个是解决客户的需求、另一个是锻炼一下自己的开发人员。         以下是系统主界面: 什么是ERP: ERP是Enterprise Resource Planning(企业资源计划)的简称,是一种主要面向制造行业进行物质资源、资金资源和信息资源集成一体化管理的企业信息管理系统。 ERP是一个以管理会计 为核心可以提供跨地区、跨部门、甚至跨公司整合实时信息的企业管理软件。 参见百度百科: http://baike.baidu.com/subview/109408/7177679.htm SmartERP.NET货物采购入库流程   SmartERP.NET 货物销售流程   三、系统客户端及服务端配置       有关程序如何配置请参见 魏琼东的文章       AgileEAS.NET SOA 中间件平台 5.2 发布说明-包含Silverlight及报表系统的开源代码下载       AgileEAS.NET SOA 中间件平台5.2版本下载、配置学习(一):下载平台并基于直连环境运行       AgileEAS.NET SOA 中间件平台5.2版本下载、配置学习(二):配置WinClient分布式运行环境       AgileEAS.NET SOA 中间件平台5.2版本下载、配置学习(三):配置ActiveXForm运行环境       AgileEAS.NET SOA 中间件平台5.2版本下载、配置学习(四):开源的Silverlight运行容器的编译、配置 四、完整的应用-实现完整的ERP       本文我们将实现一个类似电脑城的货物ERP系统,主界面如下:(登录账户:erp-admin  密码为空) 五、下载源代码编译配置运行      本案例源代码请通AgileEAS.NET SOA中间件官方网站的最新下载中的栏目进行下载或者从SVN中获取最新版本的源代码: 下载或者SVN-OUT得到代码之后我们来看一下代码文建构: 一级目录 二级目录 说明 Code   程序源代码   SmartERP.Entities 实体(ORM)代码   SmartERP.BLL.Contracts 业务契约定义代码   SmartERP.BLL.Host 数据实现代码   SmartERP.Common 公用类库   SmartERP.WinUI 界面层代码 db   用户数据库文件,SQL Server数据库 Documents   文档,用户模型文档 Bin   引用程序集及编译输出   用VS2010或者VS2012打开Code目录之中的SmartERP.sln解决方案进行编译,编译成功之后我们开始进行配置。 打开Bin目录之中的SmartERP.Main.exe.config进行客户端配置:     修改红色部分连接字符串 六、统计报表    SmartERP示例中使用的是Gird++ 报表程序 开发管理 -- GR报表管理        数据报表就是写SQL语句查询数据库 获取结果    对象报表就是通过查询内存对象   获取结果    报表的制作:为了降低入门的难度,本编介绍的是用数据报表也就是写SQL语句查询数据库的方式,对象报表将在以后的文章中介绍。 1.新建-数据报表-查询语句中 写入要查询的报表sql语句   2.报表设计界面 3.设置要显示的是哪张报表,根据GUID 4.编写查询语句 并设置过滤条件 5. 报表预览效果      由于时间仓促,程序难免会有Bug,望大家谅解。      截止这里 我们的教程就已经写完了,表结构及相关说明请参阅SmartErp.NET下载包里面的相关文档。      最后感谢SmartErp.NET的原始作者陶虎刚同学,也感谢对原始代码、文档进行整理升级,以及本文的作者计文析同学。 七、联系我们      为完善、改进和推广AgileEAS.NET而成立了敏捷软件工程实验室,是一家研究、推广和发展新技术,并致力于提供具有自主知识产权的业务基础平台软件,以及基于业务基础平台开发的管理软件的专业软件提供商。主要业务是为客户提供软件企业研发管理解决方案、企业管理软件开发,以及相关的技术支持,管理及技术咨询与培训业务。      AgileEAS.NET SOA中间件平台自2004年秋呱呱落地一来,我就一直在逐步完善和改进,也被应用于保险、医疗、电子商务、房地产、铁路、教育等多个应用,但一直都是以我个人在推广,2010年因为我辞职休息,我就想到把AgileEAS.NET推向市场,让更多的人使用。      我的技术团队成员都是合作多年的老朋友,因为这个平台是免费的,所以也没有什么收入,都是由程序员的那种理想与信念坚持,在此我感谢一起奋斗的朋友。 团队网站:http://www.agilelab.cn, AgileEAS.NET网站:http://www.smarteas.net 官方博客:http://eastjade.cnblogs.com QQ:47920381,AgileEAS.NET QQ群:113723486(AgileEAS SOA 平台)/上限1000人 199463175(AgileEAS SOA 交流)/上限1000人 120661978(AgileEAS.NET 平台交流)/上限1000人 212867943(AgileEAS.NET研究)/上限500人 147168308(AgileEAS.NET应用)/上限500人 172060626(深度AgileEAS.NET平台)/上限500人 116773358(AgileEAS.NET 平台)/上限500人 125643764(AgileEAS.NET探讨)/上限500人 193486983(AgileEAS.NET 平台)/上限500人 邮件:james@agilelab.cn,mail.james@qq.com, 电话:18629261335。

Tags:

.NET | ActiveX | AgileEAS.NET | ESB | C# | ORM | SOA | SAAS | 中间件 | 分布式 | 企业应用架构 | 企业服务总线 | 框架 | 消息中间件

发起讨论之:SOA 架构中的ESB是更好的应用于异构系统集成整合还是用于统一服务调用/基础服务实施

by 魏琼东 2013.10.18 10:46
一、讨论主题与观点       写一篇文章、发现一次自觉得有意思的SOA架构方面的讨论,源于昨天AgileEAS.NET SOA 平台群(113723486)里几个群友的一次关于ESB的一次讨论。       大家的讨论观点主要集成在:对于ESB的定义也有类观点,一类观点是把ESB定位于SOA架构之中的基础服务设施(书上都这么讲),还有一类观点就是ESB做为异构系统之间的集成和整合之间,其实ESB本身都能实现两种观点的功能,只是觉得在时下,应该更偏重于那一方面,两者的本质上最大的区别是,同一系统内部的功能是否需要经过ESB进行调用。       ESB是SOA加载的基础服务设施的此类观点,我们可以用买下图来表示:       这个图应该是最符合SOA架构和ESB的一些书籍之间的ESB架构图,我们可以简单的解释一上,即史是A系统调用A系统的服务,也必须经过ESB系统,那么有ESB系统的规划和建设就是一个必须早期考虑的问题,即我们必须先建立SOA的基础架构和ESB体系,并且在这个架构上面开发A系统、B系统、C系统,这是一种观点,那么在目前我们国内,政府、企业领导应答是很喜欢这样的结构的,统一规划、场面宏大,这里面就出现一个问题,整体系统被规划的非常完美,但是实际上这更好像一个用远也不能完全的梦(永远都没有完美的东西),实现成本就不可估量。       ESB是最好是做为异构系统之间的整合集成,我们可以用买下图来表示:       这个观点是我的观点为,即我认识这是一种比较现实和比较经济的观点,ESB用被做于异构系统之间的整合,他是支持异构系统的整合的基础设施,而不是基于统计规划下的基础服务设施,基于这个观点的原因是,企业内部各种各样的系统不可能全部推翻了,全部规划和重来,很多企业的供应商在某一领域也做的很专业,博众家之长并进行集成应该是一个比较现实和可取的做法,一个系统一个系统稳定有序的实现,应该是比全部重新规划具体更小的风险。 二、聊天记录摘抄 金靓(123140395) 13:40:58 大家好 金靓(123140395) 13:41:34 想做服务的统一调用 也就是说所有的业务系统都走服务总线 通过总线来进行业务服务的调用 简单的消息交换模式没问题 请求/响应 但是双向交换模式下如何实现呢 何戈州<hotdefans@qq.com> 13:52:15 双工吗? 金靓(123140395) 13:52:23 对的 何戈州<hotdefans@qq.com> 13:52:36 那也没问题   金靓(123140395) 13:52:57 能否给点思路 何戈州<hotdefans@qq.com> 13:53:05 socket 问老魏 金靓(123140395) 13:53:14 基于WCF 魏琼东(47920381) 14:19:02 @纳尼 双工模式貌似ESB实现不了吧。 纳尼(123140395) 14:19:27 BIZTALK里也不能吗 纳尼(123140395) 14:19:48 @魏琼东 貌似可以的 魏琼东(47920381) 14:21:06 但是全双工的通论,让ESB通知应用这事难了点 纳尼(123140395) 14:21:23 所以我有点郁闷 纳尼(123140395) 14:21:41 其实本来没去设计双向通信 魏琼东(47920381) 14:21:46 实现全双方都是socket吧 魏琼东(47920381) 14:22:10 除非用ESB回调某个系统的服务 纳尼(123140395) 14:22:27 对的 魏琼东(47920381) 14:22:32 即应用掉用===》ESB===》应用的服务 魏琼东(47920381) 14:22:40 那你说的是ESB的服务路由了 纳尼(123140395) 15:35:20 虽然没有什么含量,而且是在H.O.T指导下才弄明白的,但还是应该分享一下给大家 纳尼(123140395) 15:36:06 刚才我说的那个客户端需要调用服务实现双向通信,基于ESB 纳尼(123140395) 15:36:52 ESB提供双向接口服务 纳尼(123140395) 15:37:54 其实我想做的ESB,要实现服务的统一调用 纳尼(123140395) 15:38:09 所有的客户端都通过ESB来调用业务服务 纳尼(123140395) 15:38:39 这样的话,势必需要ESB对客户端公开的接口都要相对稳定 纳尼(123140395) 15:38:47 自己要做 纳尼(123140395) 15:39:24 也就是说A->ESB->B->ESB->A 纳尼(123140395) 15:38:39 这样的话,势必需要ESB对客户端公开的接口都要相对稳定 纳尼(123140395) 15:38:47 自己要做 纳尼(123140395) 15:39:24 也就是说A->ESB->B->ESB->A 过错  <wang2650@sohu.com> 15:39:36 java 不怕麻烦用mule 哈哈 魏琼东(47920381) 15:39:37 这个做法算是ESB的滥用吧 纳尼(123140395) 15:39:51 基于WCF下实现,也就是ESB公开一个回到契约 魏琼东(47920381) 15:40:21 WCF本身在TCP通信下本身就回回调 魏琼东(47920381) 15:40:28 但是是要选择TCP通信的前提 纳尼(123140395) 15:40:28 @魏琼东 您指的是统一调用吗? 纳尼(123140395) 15:43:12  ME TOO 魏琼东(47920381) 15:43:18  这说明在找抽 纳尼(123140395) 15:43:30  我也这么觉得 魏琼东(47920381) 15:43:34  是在搞为了ESB搞ESB 魏琼东(47920381) 15:43:42  是没有需求搞有ESB 魏琼东(47920381) 15:43:47  真正企业有很多不同的系统 魏琼东(47920381) 15:43:53  比如PB开发的,VB开发的 魏琼东(47920381) 15:43:56  JAVA开发的的 魏琼东(47920381) 15:44:00  .NET开发的 魏琼东(47920381) 15:44:04  数据库跑在ORACLE上的 魏琼东(47920381) 15:44:08  SQLServer上的 冯永博(309805629) 15:44:10  sharepoint 搞么 魏琼东(47920381) 15:44:11  还有MYSQL的 纳尼(123140395) 15:44:12  是的 魏琼东(47920381) 15:44:28  那么在这种情况下ESB就是解决问题的存在的先决条件之一 魏琼东(47920381) 15:44:39  ESB是因为大家做接口做郁闷了,才上的。 魏琼东(47920381) 15:44:42  不是一开始就上的。 纳尼(123140395) 15:44:54  是的 魏琼东(47920381) 15:45:01  ESB的设计更多的是解决不修改各个系统而实现与系统的对接 纳尼(123140395) 15:45:14  但是ESB更多的是更好的管理服务 魏琼东(47920381) 15:45:18  不是了你把所有服务都通过ESB,所有系统都修改一通 纳尼(123140395) 15:45:27  您说的是系统的集成 魏琼东(47920381) 15:45:29  那不是没事找抽嘛 纳尼(123140395) 15:45:58  您说的正在做,只不过是其他人 魏琼东(47920381) 15:46:04  ESB的做用不就是做这事的嘛 魏琼东(47920381) 15:46:21  当然,ESB也可以是SOA的基础设施 魏琼东(47920381) 15:46:26  所有的服务都经由 魏琼东(47920381) 15:46:28  ESB 魏琼东(47920381) 15:46:31  这个也没错 纳尼(123140395) 15:46:38  是的 纳尼(123140395) 15:46:53  一个完整得SOA平台 魏琼东(47920381) 15:47:06  是啊 纳尼(123140395) 15:47:12  服务的管理需要禁得其考研 魏琼东(47920381) 15:47:16  @纳尼 把你的ESB Show一下 纳尼(123140395) 15:47:32  如果不走ESB,那么服务很难管好 魏琼东(47920381) 15:47:35  “需要禁得其考研“,这个好 纳尼(123140395) 15:47:38  对不起,我刚刚开始 纳尼(123140395) 15:47:47  魏琼东(47920381) 15:47:56  现实之中就没有这样的需要 纳尼(123140395) 15:47:58  等我把这个做差不多了 魏琼东(47920381) 15:48:06  为了轮子造轮子 纳尼(123140395) 15:48:06  我会共享出来的 纳尼(123140395) 15:48:17  SOA是骗人的 魏琼东(47920381) 15:48:22  我定位做异构系统的集成之用 魏琼东(47920381) 15:48:27  也不是骗人的 魏琼东(47920381) 15:48:44  SOA架构是服务于合作伙伴的 纳尼(123140395) 15:48:48  那毕竟只是SOA的一部分 魏琼东(47920381) 15:48:55  内部一系统搞的那么复杂就有问题了 纳尼(123140395) 15:49:29  但是对于庞大的企业,业务很大 纳尼(123140395) 15:49:39  所有的业务都要是发布成服务的 纳尼(123140395) 15:50:07  如果随便的去调用服务,那么是很杂乱的 纳尼(123140395) 15:50:19  我也很赞同您说的 纳尼(123140395) 15:50:36  就是系统内的服务不走ESB 纳尼(123140395) 15:50:48  但是,什么又是系统内的呢 纳尼(123140395) 15:51:01  很多数据慢慢会被公有化 ....(879621940) 15:51:13  请问一下,如果一套系统,包括HR,CMR,ERP,OA,BI等要实现数据共享,是不是也可以用SOA技术呢? 纳尼(123140395) 15:51:41  至少中石油正在做 纳尼(123140395) 15:51:53  @。。。 如上回答 纳尼(123140395) 15:52:09  包括国内的拥有 纳尼(123140395) 15:52:12  用友 ....(879621940) 15:52:26  就是说都是使用SOA技术对吧? 纳尼(123140395) 15:52:37  他们的平台也是基于SOA的(2010年前,现在不知) 纳尼(123140395) 15:52:50  SOA更多是个理念 魏琼东(47920381) 15:52:50  你有一个假设已经错了 纳尼(123140395) 15:52:55  “骗人的” 魏琼东(47920381) 15:53:03  你假设企业内部系统是统一的 纳尼(123140395) 15:53:06  @魏琼东 您说 魏琼东(47920381) 15:53:12  纳尼(123140395)  15:49:29 但是对于庞大的企业,业务很大 所有的业务都要是发布成服务的 如果随便的去调用服务,那么是很杂乱的 我也很赞同您说的 魏琼东(47920381) 15:53:30  你的假设就是要早一部非常完美的东西 魏琼东(47920381) 15:53:39  比如说你的服务是完美的 纳尼(123140395) 15:53:42  对 魏琼东(47920381) 15:53:59  而事实是当系统庞大到这个份上就有一个问题 魏琼东(47920381) 15:54:05  这个东西永远都不成熟 魏琼东(47920381) 15:54:07  OK 魏琼东(47920381) 15:54:09  明白 纳尼(123140395) 15:54:15  SOA的理念不仅仅是关注现在,还要展望未来(说出这种话,有点恶心) 魏琼东(47920381) 15:54:19  那么更实现做的做法是什么 纳尼(123140395) 15:54:43  @魏琼东 BPM可能会解决您所说的 魏琼东(47920381) 15:54:51  更现实的做法是企业内部的系统都是由不同的供应商来供应和开发 纳尼(123140395) 15:54:54  快速应对需求的变化 纳尼(123140395) 15:55:06  赞同 冯永博(309805629) 15:55:13  这个应该没法避免,要信息化建设有个规划和统筹 魏琼东(47920381) 15:55:15  因为比始做HR的对HR业务一定是擅长的 魏琼东(47920381) 15:55:28  做PLM的也是擅长PLM的 魏琼东(47920381) 15:55:41  并且这样的成本也就会低很多 魏琼东(47920381) 15:55:49  就如同软件工程之中的敏捷方法一样 魏琼东(47920381) 15:55:57  拆成小的,一个一个人搞 纳尼(123140395) 15:55:58  非常赞同 ....(879621940) 15:55:59  如果这些系统都是自己开发呢? 魏琼东(47920381) 15:56:08  一个搞坏也只是一个 魏琼东(47920381) 15:56:16  不是一个搞坏全搞完完了 冯永博(309805629) 15:56:22  自己开发的也不一样就用的好 魏琼东(47920381) 15:56:26  我为什么支持这些观点呢 魏琼东(47920381) 15:56:34  是因为我做10多年的医疗业务 魏琼东(47920381) 15:56:38  大家都走过一个过程 魏琼东(47920381) 15:56:48  前些年大家都追求一个医院全是一家的 纳尼(123140395) 15:56:57  嗯 魏琼东(47920381) 15:56:59  但是企业做的累,医院觉得都不专业 魏琼东(47920381) 15:57:04  所以现在慢慢的都是开放式的 魏琼东(47920381) 15:57:10  专业的各做各的 纳尼(123140395) 15:57:51 我觉得BPM足够用了 魏琼东(47920381) 15:57:57 客户也觉得这样挺好 冯永博(309805629) 15:58:05 现在的趋势是越做越大 纳尼(123140395) 15:58:14 但是领导玩的都是趋势 纳尼(123140395) 15:58:24 政府上SOA 魏琼东(47920381) 15:58:30 @刺客 哥们,你的脑袋在想什么呢 纳尼(123140395) 15:58:34 移动、联通 魏琼东(47920381) 15:58:44 领导的事咱不想了 纳尼(123140395) 15:58:45 还有中石油 魏琼东(47920381) 15:58:50 反正 你做出ESB那样搞也行。 纳尼(123140395) 15:59:13 领导从别人那抄点想法,害苦我们啊 冯永博(309805629) 15:59:19 比如 SAP的ERP 集成的子系统是越来越多 纳尼(123140395) 15:59:22 我是这么想的 过错  <wang2650@sohu.com> 15:59:31 soa通常解决是服务发布的问题  esb通常解决的是异构通信的问题 纳尼(123140395) 15:59:42 最好是适应特定的场景 过错  <wang2650@sohu.com> 16:00:53 有的时候目的不同 但是会用同一样的东西 过错  <wang2650@sohu.com> 16:02:04 soa不过是esb的一部分罢了 纳尼(123140395) 16:02:49 @过错  呵呵       那么我样在建设和使用ESB到底是偏向那一个重点呢,欢迎各位博客园朋友讨论本话题。

Tags:

.NET | SOA | 中间件 | 企业应用架构 | 设计模式 | ESB | 企业服务总线

AgileEAS.NET SOA 中间件平台5.2版本下载、配置学习(四):开源的Silverlight运行容器的编译、配置

by 魏琼东 2013.10.17 10:58
一、前言      AgileEAS.NET SOA 中间件平台是一款基于基于敏捷并行开发思想和Microsoft .Net构件(组件)开发技术而构建的一个快速开发应用平台。用于帮助中小型软件企业建立一条适合市场快速变化的开发团队,以达到节省开发成本、缩短开发时间,快速适应市场变化的目的。      AgileEAS.NET SOA中间件平台提供了敏捷快速开发软件工程的最佳实践,通过提供大量的基础支撑功能如IOC、ORM、SOA、分布式体系及敏捷并发开发方法所支撑的插件开发体系,以及提供了大量的实体、数据模型设计生成工具、代码生成工具,用于帮助中小软件开发商快速成长。      AgileEAS.NET平台充分把握目前软件行业快速发展的新趋势,基于敏捷并行开发、快速适应市场这样淳朴的软件工程实践,采用业界广泛使用的Microsoft .Net构件(组件)开发技术实践了这种开发思想,帮助软件企业实现“敏捷变化、快速适合”的目标,从而帮助软件企业在激烈的市场竞争中赢得先机并获得更高的回报。 二、关于Silverlight运行容器      在2011年秋天的的时候,曾经在Silverlight企业应用开发实践-AgileEAS.NET平台5.0 Silverlight支撑预览一文之中向大家介绍过AgileEAS.NET SOA中间件平台的Silverlight运行容器,其主要目的是当时有很多朋友希望我们能支撑Silverlight的应用开发,我们就基于我们AgileEAS.NET SOA中间件平台的“敏捷并行开发思想事件”、结合“插件开发&整合”思路、AgileEAS.NET SOA中间件平台的数据访问并结合AgleEAS.NET SOA中件的SOA分布式通信技术。      目前AgileEAS.NET SOA中间件Silverlight运行容器主要应用于医疗、物联网、ERP、CRM之类人企业内部应用之中。      AgileEAS.NET SOA 中间件平台Silverlight运行容器为开发人员带来如下好处:      1.)开发Silverlight应用同开发WinForm/WPF/WebForm/WebMVC应用一样可以使用AgileEAS.NET SOA提供的ORM和Linq技术。      2.)Silverlight应用同其他WinForm/WPF/WebForm/WebMVC应用使用同样的分布式服务端平台。      3.)Silverlight应用同其他WinForm/WPF/WebForm/WebMVC应用使用同样的服务端业务代码。      4.)为应用开发人员提供了类似在Silverlight客户段直接访问远程数据库的功能,提供了类似DataTable的数据结构Matrix。      5.)AgileEAS.NET SOA中间件平台已经实现了与WinForm/WPF运行环境同样的资源管理平台的系列功能(模块管理、权限、用户、角色)以及工作流系统绝大多数功能。      6.)AgileEAS.NET SOA中间件平台Silverlight运行容器源代码是以开源形式向大家提供的,大家可以在此基础上做一些在学大的调整。 三、学习Silverlight运行容器代码结构并进行编译      ActiveXForm运行容器的运行网站由在”Silverlight.src”目录之中以源代码形式向大家提供,我们用VS2010或者VS2012打开”Silverlight.src”目录之中的”AgileEAS.NET.Silverlight”解决方案:     ”AgileEAS.NET.Silverlight”解决方案之中共有九个项目:      EAS.BPM.SilverlightUI:为BPM工作流系统的界面元素文件,AgileEAS.NET SOA中间件的Silverlight运行环境的工作流支持管理功能功能都由这个项目提供。      EAS.Demo.Res:AgileEAS.NET SOA中间件的Silverlight运行环境的客户端演示资源插件,即用于替换AgileEAS.NET SOA中间件的Silverlight运行环境主界面,登录界面的界面定义代码的一个示例。      EAS.Explorer:AgileEAS.NET SOA中间件的Silverlight运行环境的一些接口定义,主要是资源替换接口的定义。      EAS.Explorer.Entities:AgileEAS.NET SOA中间件的Silverlight运行环境管理功能的数据实体定义,比如账号、角色、模块、报表等对象的定义。      EAS.Explorer.BLL.Contracts:AgileEAS.NET SOA中间件的Silverlight运行环境管理功能的服务契约定义,因为Silverlight是分布式运行的,即业务的实现在SOA服务之中运行,所以客户端只有业务契约,没有实现实体。      EAS.SilverlightClient:AgileEAS.NET SOA中间件的Silverlight运行环境主要程序,在这里面实现了一个可替换的插件应用环境。      EAS.SilverlightClient.AddIn:AgileEAS.NET SOA中间件的Silverlight运行环境管理功能的实现程序,主要实现了模块管理、角色账号、权限、组织机构等等。      EAS.SilverlightClient.AdminKit:辅助程序,本身没有多大意思,其功能是把EAS.SilverlightClient.AddIn和EAS.BPM.SilverlightUI打成一个EAS.SilverlightClient.AdminKit.xap包。      EAS.SilverlightClient.Web:AgileEAS.NET SOA中间件平台Silverlight运行容器的入口网站,即功能承载网站,包括一个首页及Silverlight XAP包的部署目录及客户端运行时所需要的配置文件和XAP包的自动升级配置。      了解了这九个项目的功能之后我们开始编译整个解决方案,保证所有项目编译通过:       了解了这八个项目的功能之后我们开始编译整个解决方案,保证所有项目编译通过: 四、配置并运行Silverlight运行容器     Silverlight应用是不直接连接数据库进行处理的,所以配置ActiveXForm运行容器/环境必须有一个先决条件,那就是Silverlight必须运行的AgileEAS.NET SOA 中间件的分布式环境下,即我们的SOA服务端必须运行,关于如何做这此工作,请参考前面的AgileEAS.NET SOA 中间件平台5.2版本下载、配置学习(二):配置WinClient分布式运行环境一文。      那么我们首先启动运行“AppServer\Bin”目录之中的“soaserver.start.bat”脚本,运行SOA服务:      接下来我们开始配置Silverlight运行容器的一些参数、以及Silverlight客户端XAP文件的升级配置,这些配置信息记录在项目”EAS.SilverlightClient.Web”的“ClientBin”目录之中,文件名称为“slconfig.xml”和“slUpdate.xml”。      其中“slconfig.xml”为Silverlight应用的系统配置文件,其内容如下: 1: <?xml version="1.0" encoding="utf-8"?> 2: <eas> 3: <configurations> 4: <item name="Key" value="Value" /> 5: <!--是否调试状态。--> 6: <item name="Debug" value="false" /> 7: <!--调试程序集。--> 8: <item name="Assembly" value="EAS.SilverlightClient.AddIn" /> 9: <!--外挂资源包。--> 10: <!--<item name="EAS.Explorer.Resource" value="EAS.Explorer.Res.xap,EAS.Explorer.Res.dll,EAS.Explorer.Res.Resources" />--> 11: </configurations> 12: <objects> 13: <!--分布式通信组件。--> 14: <object name="ServiceBridger" assembly="EAS.MicroKernel" type="EAS.Distributed.ServiceBridger" LifestyleType="Thread" > 15: <property name="ServiceUrl" type="string" value="http://localhost:6608/eas/services/EAS.RIAService" /> 16: </object> 17: <object name="DataAccessor" assembly="EAS.Data" type="EAS.Data.Access.DataAccessor" LifestyleType="Thread"> 18: <property name="ServiceBridger" type="object" value="ServiceBridger"/> 19: </object> 20: <object name="OrmAccessor" assembly="EAS.Data" type="EAS.Data.ORM.OrmAccessor" LifestyleType="Thread"> 21: <property name="ServiceBridger" type="object" value="ServiceBridger"/> 22: </object> 23: </objects> 24: </eas>      其中参数Debug表示系统是否为调试模式,即加载某一个Silverlight程序集并自动加载其中的插件进行调试运行,如果这个值为True,则系统会自动加载参数Assembly所指向的程序集,并加载其中的插件到系统导航之中,并跳过系统对登录账号的对所加载模块的权限检查,直接运行,如果这个参数为False,则Assembly参数无效,系统按照当前登录账号的权限加载导航,运行时也运行模块权限检测,一版情况下在开发过程之中我们都采用调试模式,这样可以省去安装配置插件的过程,而在生产过程,我们则使用非调试模式。      参数EAS.Explorer.Resource为外挂界面资源的配置,类似于WinClient的配置,我们不要修改他。     对像ServiceBridger的属性ServiceUrl配置了远程RIA服务的地址,即SOA服务实现之中的RIA服务的地址: 1: <object name="ServiceBridger" assembly="EAS.MicroKernel" type="EAS.Distributed.ServiceBridger" LifestyleType="Thread" > 2: <property name="ServiceUrl" type="string" value="http://localhost:6608/eas/services/EAS.RIAService" /> 3: </object>      一搬情况下,我们只需要修改IP地址或者域名即可,后面的不要做修改。      接下来我们打开升级配置“slUpdate.xml”: 1: <?xml version="1.0" encoding="utf-8"?> 2: <SmartConfig xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 3: <URI>http://www.smarteas.net/</URI> 4: <Name>AgileEAS.NET升级配置文件</Name> 5: <Description>用于AgileEAS.NET平台SmartClient/ActiveX运行容器模块升级之用</Description> 6: <StartEx /> 7: <Time>2013-10-16T16:13:19.7125705+08:00</Time> 8: <Files> 9: <SmartFile> 10: <FileName>EAS.SilverlightClient.AdminKit.xap</FileName> 11: <Version>1.1.0.0</Version> 12: <Time>2013-10-16T09:54:19.7125705+08:00</Time> 13: </SmartFile> 14: <SmartFile> 15: <FileName>WF.Demo.SilverlightUI.xap</FileName> 16: <Version>1.1.0.0</Version> 17: <Time>2013-10-16T09:54:19.7125705+08:00</Time> 18: </SmartFile> 19: </Files> 20: </SmartConfig>     这个配置文件结构等同于前面的AgileEAS.NET SOA 中间件平台5.2版本下载、配置学习(二):配置WinClient分布式运行环境一文之中“EAS.SmartUpdateConfig.exe”工作所生成的文件,只不过,此处手工配置,而不是工具生成,我们需要把下载到客户端Silverlight环境之中的文件(主要是一些XAP包)以SmartFile配置信息形式记录在这个配置文件之中,需要多次注意的是,客户端会依据这个文件的最后时间进行更新。     OK,Silverlight环境的配置到这就可以了,接下来我们运行AgileEAS.NET SOA 中间件Silverlight运行容器看看。      按F5运行”EAS.SilverlightClient.Web”项目,打开浏览器:     输入用户名:Administrator,密码:sa然后点击登录,系统会有如下有“是否增加可用存储”的提示:     因为AgileEAS.NET SOA 中间件设置为支持Silverlight的本地存储文件,以缓存XAP包和某些业务数据,我们选择点击“是”,然后重新输入密码进行登录,将会打开系统主界面:     我们选择某个功能进行操作:     OK,Silverlight运行容器搞定。 五、联系我们      为了完善、改进和推广AgileEAS.NET而成立了敏捷软件工程实验室,是一家研究、推广和发展新技术,并致力于提供具有自主知识产权的业务基础平台软件,以及基于业务基础平台了开发的管理软件的专业软件提供商。主要业务是为客户提供软件企业研发管理解决方案、企业管理软件开发,以及相关的技术支持,管理及技术咨询与培训业务。      AgileEAS.NET平台自2004年秋呱呱落地一来,我就一直在逐步完善和改进,也被应用于保险、医疗、电子商务、房地产、铁路、教育等多个应用,但一直都是以我个人在推广,2010年因为我辞职休息,我就想到把AgileEAS.NET推向市场,让更多的人使用。      技术团队成员都是合作多年的老朋友,因为这个平台是免费的,我们的营运开支主要靠为客户提供咨询服务所得,我们都是因为程序员的那种理想与信念坚持,在此我感谢一起奋斗的朋友和一直支持我们工作的客户、朋友。 团队网站:http://www.agilelab.cn, AgileEAS.NET网站:http://www.smarteas.net 官方博客:http://eastjade.cnblogs.com QQ:47920381 AgileEAS.NET QQ群: 113723486(AgileEAS SOA 平台)/上限1000人 199463175(AgileEAS SOA 交流)/上限1000人 120661978(AgileEAS.NET 平台交流)/上限1000人 212867943(AgileEAS.NET研究)/上限500人 147168308(AgileEAS.NET应用)/上限500人 172060626(深度AgileEAS.NET平台)/上限500人 116773358(AgileEAS.NET 平台)/上限500人 125643764(AgileEAS.NET探讨)/上限500人 193486983(AgileEAS.NET 平台)/上限500人 邮件:james@agilelab.cn,mail.james@qq.com, 电话:18629261335。

Tags:

.NET | C# | Silverlight | SOA | Socket | 分布式 | 框架 | 网站优化 | 下载 | 云计算 | 中间件

AgileEAS.NET SOA 中间件平台5.2版本下载、配置学习(三):配置ActiveXForm运行环境

by 魏琼东 2013.10.16 20:56
一、前言      AgileEAS.NET SOA 中间件平台是一款基于基于敏捷并行开发思想和Microsoft .Net构件(组件)开发技术而构建的一个快速开发应用平台。用于帮助中小型软件企业建立一条适合市场快速变化的开发团队,以达到节省开发成本、缩短开发时间,快速适应市场变化的目的。      AgileEAS.NET SOA中间件平台提供了敏捷快速开发软件工程的最佳实践,通过提供大量的基础支撑功能如IOC、ORM、SOA、分布式体系及敏捷并发开发方法所支撑的插件开发体系,以及提供了大量的实体、数据模型设计生成工具、代码生成工具,用于帮助中小软件开发商快速成长。      AgileEAS.NET平台充分把握目前软件行业快速发展的新趋势,基于敏捷并行开发、快速适应市场这样淳朴的软件工程实践,采用业界广泛使用的Microsoft .Net构件(组件)开发技术实践了这种开发思想,帮助软件企业实现“敏捷变化、快速适合”的目标,从而帮助软件企业在激烈的市场竞争中赢得先机并获得更高的回报。 二、关于ActiveXForm运行容器      在我早期的博客园文章基于DotNet构件技术的企业级敏捷软件开发平台 - AgileEAS.NET - ActiveXForm运行容器曾经向大家介绍过AgileEAS.NET SOA中间件平台的ActiveXForm运行容器,其主要用于把早期用WinForm开发的程序跑在IE浏览器之中,给用户造成一个BS项目的错觉,本来打算在4.0版本之中就给大家公开下载和发布的,但是鉴于之前直接在网上部署引用的一下配置问题的反馈我们并没有公开发布给大家。      如果是做互联网项目,使用ActiveXForm技术来做BS应用,那么我们很直接的告诉你,这事你是找抽,不靠谱,也不可取,但是在做内部管理信息系统的时候,比如财务、EPR、HIS、电子病历等这些项目,这东西又是一种可以去尝试的做法,我们虽然没有公开发布ActiveXForm但是我们一真在为使用ActiveXForm的软件企业提供技术帮助和升级。      AgileEAS.NET SOA 中间件平台所提供的功能都是比较实现的企业应用开发功能,在5.0发布之后就有很多企业希望能得到有关于ActiveXForm的发布包和技术支持资料,所以我们决定在AgileEAS.NET SOA中间件5.2版本之中提供ActiveXForm的内容,也在配置和使用上面提供一些文档资料。 三、配置ActiveXForm运行容器      配置ActiveXForm运行容器/环境必须有一个先决条件,那就是系统必须具有自动升级功能,即我们的SOA服务端必须运行并且配置好自动升级,关于如何做这此工作,请参考前面的AgileEAS.NET SOA 中间件平台5.2版本下载、配置学习(二):配置WinClient分布式运行环境一文。      那么我们首先启动运行“AppServer\Bin”目录之中的“soaserver.start.bat”脚本,运行SOA服务:      接下来我们开始配置ActiveXForm运行容器。      ActiveXForm运行容器的运行网站由在”ActiveXForm.Web”目录之中以源代码形式向大家提供,我们用VS2010或者VS2012打开”ActiveXForm.Web”目录之中的”EAS.ActiveXForm.Web”解决方案:      在”EAS.ActiveXForm.Web”项目之中,我们会看到如下结构:      首先我们修改”xClient\config”目录之中的文件”clientclasp.xml”和”activexForm.xml”两个配置文件,其中”clientclasp.xml”定义了ActiveXForm引擎/客户端钩子的定义,主要包括程序的升级定义,内容如下: 1: <?xml version="1.0" encoding="utf-8"?> 2: <ClientClasp> 3: <!--客户端钩子启动模块。--> 4: <item name="ClaspStart" value="EAS.ActiveXForm.ClaspStart,EAS.ActiveXForm.ClientClasp.AddIn" /> 5: <!--应用系统名称。--> 6: <item name="ApplicationName" value="AgileEAS.Net SOA中间件" /> 7: <!--是否开启升级。--> 8: <item name="AllowUpdate" value="true" /> 9: <!--升级服务地址。--> 10: <item name="UpdateUrl" value="net.tcp://localhost:6607/eas/services/eas.updateservice" /> 11: </ClientClasp>     其中配置项目”claspstart”为客户端初始化参数,这个不需要改变,”ApplicationName”为升级程序的标题显示,”AllowUpdate”是否开启升级,”UpdateUrl”为升级地址,关于具体的配置参数得参考AgileEAS.NET SOA 中间件平台5.2版本下载、配置学习(二):配置WinClient分布式运行环境一文中服务端的配置参数。     ”activexForm.xml”配置文件为ActiveXForm应用程序的运行配置,其内容和AgileEAS.NET SOA 中间件平台5.2版本下载、配置学习(二):配置WinClient分布式运行环境一文这是分布式环境情况下“EAS.WinClient.Start.exe.config”配置文件内容一模一样,我们可以把配置复制过来: 1: <?xml version="1.0" encoding="utf-8"?> 2: <configuration> 3: <configSections> 4: <section name="eas" type="EAS.ConfigHandler,EAS.MicroKernel" /> 5: </configSections> 6: <!--SQLite运行必需--> 7: <startup useLegacyV2RuntimeActivationPolicy="true"> 8: <supportedRuntime version="v4.0"/> 9: </startup> 10: <eas> 11: <configurations> 12: <item name="Key" value="Value" /> 13: </configurations> 14: <objects> 15: <!--分布式通信组件。--> 16: <object name="ServiceBridger" assembly="EAS.Distributed" type="EAS.Distributed.ServiceBridger" LifestyleType="Thread" > 17: <property name="ServiceName" type="string" value="EAS.RMI.Service" /> 18: </object> 19: <object name="DataAccessor" assembly="EAS.Distributed" type="EAS.Distributed.DataAccessor" LifestyleType="Thread" > 20: <property name="ServiceBridger" type="object" value="ServiceBridger" /> 21: </object> 22: <object name="OrmAccessor" assembly="EAS.Distributed" type="EAS.Distributed.OrmAccessor" LifestyleType="Thread" > 23: <property name="ServiceBridger" type="object" value="ServiceBridger" /> 24: <property name="DataAccessor" type="object" value="DataAccessor" /> 25: </object> 26: <!--日志管理--> 27: <object name="Logger" assembly="EAS.MicroKernel" type="EAS.Loggers.TextLogger" LifestyleType="Singleton" /> 28: <!--资源--> 29: <!--<object name="EAS.Explorer.Resource" assembly="EAS.Explorer.Res" type="EAS.Explorer.Res.Resources" LifestyleType="Singleton" />--> 30: </objects> 31: <services> 32: <service name="EAS.RMI.Service" service-type="WcfService" singleton="true" url="net.tcp://127.0.0.1:6607/eas/services/EAS.RMIService" /> 33: <service name="EAS.Storage.Service" service-type="WcfService" singleton="true" url="net.tcp://127.0.0.1:6607/eas/services/EAS.StorageService" /> 34: </services> 35: </eas> 36: </configuration>      接下来我们配置“Web.config”文件,因为ActiveXForm运行的登录验证需要访问验证服务,所以我们必须配置“Web.config”,其内容如下: 1: <?xml version="1.0" encoding="utf-8"?> 2: <configuration> 3:  4: <configSections> 5: <section name="eas" type="EAS.ConfigHandler,EAS.MicroKernel" /> 6: </configSections> 7: 8: <!--支持混合程序集--> 9: <startup useLegacyV2RuntimeActivationPolicy="true"> 10: <supportedRuntime version="v4.0"/> 11: </startup> 12: <eas> 13: <configurations> 14: <item name="Key" value="Value" /> 15: </configurations> 16: <objects> 17: <!--分布式通信组件。--> 18: <object name="ServiceBridger" assembly="EAS.Distributed" type="EAS.Distributed.ServiceBridger" LifestyleType="Thread" > 19: <property name="ServiceName" type="string" value="EAS.RMI.Service" /> 20: </object> 21: <object name="DataAccessor" assembly="EAS.Distributed" type="EAS.Distributed.DataAccessor" LifestyleType="Thread" > 22: <property name="ServiceBridger" type="object" value="ServiceBridger" /> 23: </object> 24: <object name="OrmAccessor" assembly="EAS.Distributed" type="EAS.Distributed.OrmAccessor" LifestyleType="Thread" > 25: <property name="ServiceBridger" type="object" value="ServiceBridger" /> 26: <property name="DataAccessor" type="object" value="DataAccessor" /> 27: </object> 28: <!--日志管理--> 29: <object name="Logger" assembly="EAS.MicroKernel" type="EAS.Loggers.TextLogger" LifestyleType="Singleton" /> 30: </objects> 31: <services> 32: <service name="EAS.RMI.Service" service-type="WcfService" url="net.tcp://localhost:6607/eas/services/EAS.RMIService" /> 33: </services> 34: </eas> 35: 36: <system.web> 37: <compilation debug="true" targetFramework="4.0" /> 38: <httpModules> 39: <add name="SecurityDemandModule" type="EAS.Explorer.Web.SecurityDemandModule, EAS.Explorer.Web"/> 40: </httpModules> 41: </system.web> 42:  43: </configuration>      在配置文件的“configuration/eas/objects”之中的内容同ActiveXForm.xml文件内容一致,但是没有“EAS.Explorer.Resource”,在ActieXForm.xml和Web.Config文件之中,重点是远程服务地址的配置: 1: <services> 2: <service name="EAS.RMI.Service" service-type="WcfService" singleton="true" url="net.tcp://127.0.0.1:6607/eas/services/EAS.RMIService" /> 3: </services>      ActiveXForm运行之前的配置到这就可以了,接下来看运行时的IE设置。 四、ActiveXForm运行时的IE设置      把“Default.aspx”设为起始页,然后按F5运行”EAS.ActiveXForm.Web”项目,打开IE浏览器,有如下界面:     很显然,IE的安全性阻止ActiveXForm的运行,我们按下面的提示点击“安装根证书”,会有如下提示:     选择打开,弹出如下窗口:     点击“安装证书”继续:     选择“下一步”:     选中“将所有的证书放入下列存储”,点击“浏览”:      选择“受信任的根证书颁发机构”,点击“确定”:      点击“下一步”:      点击“完成”进行证书安装,将会弹出证书安装确定:      点击“是”完成证书安装,然后我们重新打开“Default.aspx”页面:      在IE安全提示“?”处点鼠标邮:      选中“为计算机上的所有用户安装此加载项(A)”,将会弹出“ActiveXForm插件”安装对话框:      点击“安装”,IE会自动安装AgileEAS.NET SOA中间件ActiveXForm插件,安装完成后系统会有如下升级提示:      点击“确定”,打开自动升级程序进行升级:      升级完成之后点击“关闭”然后重新打开打开“Default.aspx”页面,发布不再提示脚本错误:      输入用户名:Administrator,密码:sa之后点击“登录”,系统将会为我们呈现出AgileEAS.NET SOA 中间件ActiveXForm运行容器的主界面:      我们随便打开个功能看看是否好用,比如打开模块管理,并查看某个模块的属性:       是否发现这界面似曾相似^_^ 五、如果配置不成功      如果按照第四节的配置还是不能运行成功运行,那么首先打开首页之后,把当前网站localhost加入到可信息站点:      然后再进行第四节的配置,如果还不行,那么打开首页之设置IE“可信站点”区域的安全性,选择自定义级别,启用“对未标记为可安全执行脚本的ActiveX控件初始化并且执行脚本:       然后再进行第四节的操作,如果还是不行,那么请打开首页之后:       即手机下载msi安装包文件”xClient/downloads/EAS.ActiveXForm.msi”安装项目,进行手工安装,安装完成之后重新打开“Default.aspx”页面。 六、ActiveXForm的特点与局限      AgileEAS.NET SOA中间件ActiveXForm运行容器的本质是通过一个浏览器插件,把原来基于AgileEAS.NET SOA中间件平台所开发的WinForm/WPF应用运行与IE浏览器之中,以达到通过Winform/WPF开发BS应用(此处需要说明一下应该是伪BS应用),非常适合没有BS开发能力的一些中小管理软件企业,基于某些原因,ActiveXForm这种方式的伪BS应用非常的广,比如企业内部的财务系统、医院的电子病历、区域公共卫生平台之中的医疗机构信息系统,企业内部使用的其他一些系统之中。      AgileEAS.NET SOA中间件ActiveXForm运行容器并不只能运行基于AgileEAS.NET SOA中间件开发的应用系统,理论上可以扩展为可以把任何用WinFrom/WPF开发的系统都能转换为这种ActiveXForm加载的BS应用。      当然了,AgileEAS.NET SOA中间件ActiveXForm这种模式的应用也是有很大的局限的,比如,非常不适合在互联网上运行,因为其所有客户端都需要安装.NET Framework ,也需要安装ActiveXForm插件、导入证书甚至设置安全性。 七、联系我们      为了完善、改进和推广AgileEAS.NET而成立了敏捷软件工程实验室,是一家研究、推广和发展新技术,并致力于提供具有自主知识产权的业务基础平台软件,以及基于业务基础平台了开发的管理软件的专业软件提供商。主要业务是为客户提供软件企业研发管理解决方案、企业管理软件开发,以及相关的技术支持,管理及技术咨询与培训业务。      AgileEAS.NET平台自2004年秋呱呱落地一来,我就一直在逐步完善和改进,也被应用于保险、医疗、电子商务、房地产、铁路、教育等多个应用,但一直都是以我个人在推广,2010年因为我辞职休息,我就想到把AgileEAS.NET推向市场,让更多的人使用。      技术团队成员都是合作多年的老朋友,因为这个平台是免费的,我们的营运开支主要靠为客户提供咨询服务所得,我们都是因为程序员的那种理想与信念坚持,在此我感谢一起奋斗的朋友和一直支持我们工作的客户、朋友。 团队网站:http://www.agilelab.cn, AgileEAS.NET网站:http://www.smarteas.net 官方博客:http://eastjade.cnblogs.com QQ:47920381 AgileEAS.NET QQ群: 113723486(AgileEAS SOA 平台)/上限1000人 199463175(AgileEAS SOA 交流)/上限1000人 120661978(AgileEAS.NET 平台交流)/上限1000人 212867943(AgileEAS.NET研究)/上限500人 147168308(AgileEAS.NET应用)/上限500人 172060626(深度AgileEAS.NET平台)/上限500人 116773358(AgileEAS.NET 平台)/上限500人 125643764(AgileEAS.NET探讨)/上限500人 193486983(AgileEAS.NET 平台)/上限500人 邮件:james@agilelab.cn,mail.james@qq.com, 电话:18629261335。

Tags:

.NET | ActiveX | ActiveXForm | AgileEAS.NET | C# | SOA | Socket | 分布式 | 框架 | 消息中间件 | 中间件

AgileEAS.NET SOA 中间件平台5.2版本下载、配置学习(二):配置WinClient分布式运行环境

by 魏琼东 2013.10.16 09:25
一、前言      AgileEAS.NET SOA 中间件平台是一款基于基于敏捷并行开发思想和Microsoft .Net构件(组件)开发技术而构建的一个快速开发应用平台。用于帮助中小型软件企业建立一条适合市场快速变化的开发团队,以达到节省开发成本、缩短开发时间,快速适应市场变化的目的。      AgileEAS.NET SOA中间件平台提供了敏捷快速开发软件工程的最佳实践,通过提供大量的基础支撑功能如IOC、ORM、SOA、分布式体系及敏捷并发开发方法所支撑的插件开发体系,以及提供了大量的实体、数据模型设计生成工具、代码生成工具,用于帮助中小软件开发商快速成长。      AgileEAS.NET平台充分把握目前软件行业快速发展的新趋势,基于敏捷并行开发、快速适应市场这样淳朴的软件工程实践,采用业界广泛使用的Microsoft .Net构件(组件)开发技术实践了这种开发思想,帮助软件企业实现“敏捷变化、快速适合”的目标,从而帮助软件企业在激烈的市场竞争中赢得先机并获得更高的回报。 二、配置分布式方式运行WinClient运行容器      在前面的AgileEAS.NET SOA 中间件平台5.2版本下载、配置学习(一):下载平台并基于直连环境运行一文之中,为大家介绍了如何下载AgileEAS.NET SOA中间件平台,以及如何初始化数据库运行环境、配置以直连方式运行AgileEAS.NET SOA 中间件WinCleint以直接数据库方式运行。      本文我们将为大家讲解如何以配置以”SOA服务-分布式客户端”方向运行AgileEAS.ENT SOA中间件平台WinClient容器。 三、配置SOA分布式服务端      在配置服务端之湔我们抚运动一下下载包根目录之中的”EAS.Publisher.exe”应用程序:      ”EAS.Publisher.exe”控件台应用程序是一个用于帮助开发人员进行分布式部署时的分发程序,其本质是将发布包“bin\dotnet”之中的程序集复制到“SOA服务”运行的环境目录“AppServer”下面的各级目录,运行程序如下: 运行时自动调用“eas.publish.cmd”脚本,将文件分发到“AppServer”下面的各级目录,其脚本内容如下: 1: @rem 复制到下载目录 2: copy @RootDirectory\bin\dotnet\AgileIM.Client.exe @RootDirectory\appserver\xclient\files\AgileIM.Client.exe /y 3: copy @RootDirectory\bin\dotnet\AgileIM.Client.exe.config @RootDirectory\appserver\xclient\files\AgileIM.Client.exe.config /y 4: copy @RootDirectory\bin\dotnet\AgileIM.Contracts.dll @RootDirectory\appserver\xclient\files\AgileIM.Contracts.dll /y 5: copy @RootDirectory\bin\dotnet\AgileIM.Service.dll @RootDirectory\appserver\xclient\files\AgileIM.Service.dll /y 6: copy @RootDirectory\bin\dotnet\AxInterop.grdesLib.dll @RootDirectory\appserver\xclient\files\AxInterop.grdesLib.dll /y 7: copy @RootDirectory\bin\dotnet\AxInterop.grproLib.dll @RootDirectory\appserver\xclient\files\AxInterop.grproLib.dll /y 8: copy @RootDirectory\bin\dotnet\EAS.ActiveXForm.ClientClasp.AddIn.dll @RootDirectory\appserver\xclient\files\EAS.ActiveXForm.ClientClasp.AddIn.dll /y 9: copy @RootDirectory\bin\dotnet\EAS.BPM.Activities.dll @RootDirectory\appserver\xclient\files\EAS.BPM.Activities.dll /y 10: copy @RootDirectory\bin\dotnet\EAS.BPM.BLL.Host.dll @RootDirectory\appserver\xclient\files\EAS.BPM.BLL.Host.dll /y 11: copy @RootDirectory\bin\dotnet\EAS.BPM.WinUI.dll @RootDirectory\appserver\xclient\files\EAS.BPM.WinUI.dll /y 12: copy @RootDirectory\bin\dotnet\eas.client.ini @RootDirectory\appserver\xclient\files\eas.client.ini /y 13: copy @RootDirectory\bin\dotnet\EAS.Configure.exe @RootDirectory\appserver\xclient\files\EAS.Configure.exe /y 14: copy @RootDirectory\bin\dotnet\EAS.Configure.exe.config @RootDirectory\appserver\xclient\files\EAS.Configure.exe.config /y 15: copy @RootDirectory\bin\dotnet\EAS.Data.Controls.dll @RootDirectory\appserver\xclient\files\EAS.Data.Controls.dll /y 16: copy @RootDirectory\bin\dotnet\EAS.Data.dll @RootDirectory\appserver\xclient\files\EAS.Data.dll /y 17: copy @RootDirectory\bin\dotnet\EAS.Data.Provider.dll @RootDirectory\appserver\xclient\files\EAS.Data.Provider.dll /y 18: copy @RootDirectory\bin\dotnet\EAS.Distributed.dll @RootDirectory\appserver\xclient\files\EAS.Distributed.dll /y 19: copy @RootDirectory\bin\dotnet\EAS.Explorer.BLL.Contracts.dll @RootDirectory\appserver\xclient\files\EAS.Explorer.BLL.Contracts.dll /y 20: copy @RootDirectory\bin\dotnet\EAS.Explorer.BLL.Host.dll @RootDirectory\appserver\xclient\files\EAS.Explorer.BLL.Host.dll /y 21: copy @RootDirectory\bin\dotnet\EAS.Explorer.dll @RootDirectory\appserver\xclient\files\EAS.Explorer.dll /y 22: copy @RootDirectory\bin\dotnet\EAS.Explorer.Entities.dll @RootDirectory\appserver\xclient\files\EAS.Explorer.Entities.dll /y 23: copy @RootDirectory\bin\dotnet\EAS.Explorer.Res.dll @RootDirectory\appserver\xclient\files\EAS.Explorer.Res.dll /y 24: copy @RootDirectory\bin\dotnet\EAS.Explorer.WinUI.dll @RootDirectory\appserver\xclient\files\EAS.Explorer.WinUI.dll /y 25: copy @RootDirectory\bin\dotnet\EAS.FormDesigner.exe @RootDirectory\appserver\xclient\files\EAS.FormDesigner.exe /y 26: copy @RootDirectory\bin\dotnet\EAS.GReport.Controls.dll @RootDirectory\appserver\xclient\files\EAS.GReport.Controls.dll /y 27: copy @RootDirectory\bin\dotnet\EAS.MicroKernel.dll @RootDirectory\appserver\xclient\files\EAS.MicroKernel.dll /y 28: copy @RootDirectory\bin\dotnet\EAS.Monitor.dll @RootDirectory\appserver\xclient\files\EAS.Monitor.dll /y 29: copy @RootDirectory\bin\dotnet\EAS.NLB.Monitor.exe @RootDirectory\appserver\xclient\files\EAS.NLB.Monitor.exe /y 30: copy @RootDirectory\bin\dotnet\EAS.NLB.Server.exe @RootDirectory\appserver\xclient\files\EAS.NLB.Server.exe /y 31: copy @RootDirectory\bin\dotnet\EAS.OrmDesigner.exe @RootDirectory\appserver\xclient\files\EAS.OrmDesigner.exe /y 32: copy @RootDirectory\bin\dotnet\EAS.OrmDesigner.exe.config @RootDirectory\appserver\xclient\files\EAS.OrmDesigner.exe.config /y 33: copy @RootDirectory\bin\dotnet\EAS.Report.Controls.dll @RootDirectory\appserver\xclient\files\EAS.Report.Controls.dll /y 34: copy @RootDirectory\bin\dotnet\EAS.SmartUpdater.exe @RootDirectory\appserver\xclient\files\EAS.SmartUpdater.exe /y 35: copy @RootDirectory\bin\dotnet\EAS.SOA.Monitor.exe @RootDirectory\appserver\xclient\files\EAS.SOA.Monitor.exe /y 36: copy @RootDirectory\bin\dotnet\EAS.ThirdParty.Controls.dll @RootDirectory\appserver\xclient\files\EAS.ThirdParty.Controls.dll /y 37: copy @RootDirectory\bin\dotnet\EAS.WinClient.dll @RootDirectory\appserver\xclient\files\EAS.WinClient.dll /y 38: copy @RootDirectory\bin\dotnet\EAS.WinClient.Start.exe @RootDirectory\appserver\xclient\files\EAS.WinClient.Start.exe /y 39: copy @RootDirectory\bin\dotnet\EAS.WinClient.Start.exe.config @RootDirectory\appserver\xclient\files\EAS.WinClient.Start.exe.config /y 40: copy @RootDirectory\bin\dotnet\EAS.Windows.dll @RootDirectory\appserver\xclient\files\EAS.Windows.dll /y 41: copy @RootDirectory\bin\dotnet\EAS.Wpf.Controls.dll @RootDirectory\appserver\xclient\files\EAS.Wpf.Controls.dll /y 42: copy @RootDirectory\bin\dotnet\grdes50.dll @RootDirectory\appserver\xclient\files\grdes50.dll /y 43: copy @RootDirectory\bin\dotnet\gregn50.dll @RootDirectory\appserver\xclient\files\gregn50.dll /y 44: copy @RootDirectory\bin\dotnet\ICSharpCode.AvalonEdit.dll @RootDirectory\appserver\xclient\files\ICSharpCode.AvalonEdit.dll /y 45: copy @RootDirectory\bin\dotnet\Interop.grdesLib.dll @RootDirectory\appserver\xclient\files\Interop.grdesLib.dll /y 46: copy @RootDirectory\bin\dotnet\Interop.grproLib.dll @RootDirectory\appserver\xclient\files\Interop.grproLib.dll /y 47: copy @RootDirectory\bin\dotnet\itextsharp.dll @RootDirectory\appserver\xclient\files\itextsharp.dll /y 48: copy @RootDirectory\bin\dotnet\lua51.x64.dll @RootDirectory\appserver\xclient\files\lua51.x64.dll /y 49: copy @RootDirectory\bin\dotnet\lua51.x86.dll @RootDirectory\appserver\xclient\files\lua51.x86.dll /y 50: copy @RootDirectory\bin\dotnet\LuaInterface.x64.dll @RootDirectory\appserver\xclient\files\LuaInterface.x64.dll /y 51: copy @RootDirectory\bin\dotnet\LuaInterface.x86.dll @RootDirectory\appserver\xclient\files\LuaInterface.x86.dll /y 52: copy @RootDirectory\bin\dotnet\Microsoft.Data.ConnectionUI.Dialog.dll @RootDirectory\appserver\xclient\files\Microsoft.Data.ConnectionUI.Dialog.dll /y 53: copy @RootDirectory\bin\dotnet\Microsoft.Data.ConnectionUI.dll @RootDirectory\appserver\xclient\files\Microsoft.Data.ConnectionUI.dll /y 54: copy @RootDirectory\bin\dotnet\Microsoft.XmlNotepad.dll @RootDirectory\appserver\xclient\files\Microsoft.XmlNotepad.dll /y 55: copy @RootDirectory\bin\dotnet\MongoDB.dll @RootDirectory\appserver\xclient\files\MongoDB.dll /y 56: copy @RootDirectory\bin\dotnet\MySql.Data.dll @RootDirectory\appserver\xclient\files\MySql.Data.dll /y 57: copy @RootDirectory\bin\dotnet\NetronGraphLib.dll @RootDirectory\appserver\xclient\files\NetronGraphLib.dll /y 58: copy @RootDirectory\bin\dotnet\protobuf-net.xml @RootDirectory\appserver\xclient\files\protobuf-net.xml /y 59: copy @RootDirectory\bin\dotnet\RdlDesigner.dll @RootDirectory\appserver\xclient\files\RdlDesigner.dll /y 60: copy @RootDirectory\bin\dotnet\RdlEngine.dll @RootDirectory\appserver\xclient\files\RdlEngine.dll /y 61: copy @RootDirectory\bin\dotnet\RdlViewer.dll @RootDirectory\appserver\xclient\files\RdlViewer.dll /y 62: copy @RootDirectory\bin\dotnet\System.Data.SQLite.DLL @RootDirectory\appserver\xclient\files\System.Data.SQLite.DLL /y 63: copy @RootDirectory\bin\dotnet\System.Workflow.Activities.dll @RootDirectory\appserver\xclient\files\System.Workflow.Activities.dll /y 64: copy @RootDirectory\bin\dotnet\System.Workflow.ComponentModel.dll @RootDirectory\appserver\xclient\files\System.Workflow.ComponentModel.dll /y 65: copy @RootDirectory\bin\dotnet\System.Workflow.Runtime.dll @RootDirectory\appserver\xclient\files\System.Workflow.Runtime.dll /y 66: copy @RootDirectory\bin\dotnet\update.ini @RootDirectory\appserver\xclient\files\update.ini /y 67: copy @RootDirectory\bin\dotnet\WF.Demo.DAL.dll @RootDirectory\appserver\xclient\files\WF.Demo.DAL.dll /y 68: copy @RootDirectory\bin\dotnet\WF.Demo.UI.dll @RootDirectory\appserver\xclient\files\WF.Demo.UI.dll /y 69: @rem 复制到下载配置目录 70: copy @RootDirectory\bin\dotnet\EAS.SmartUpdateConfig.exe @RootDirectory\appserver\xclient\EAS.SmartUpdateConfig.exe /y 71: copy @RootDirectory\bin\dotnet\EAS.SmartUpdateConfig.exe.config @RootDirectory\appserver\xclient\EAS.SmartUpdateConfig.exe.config /y 72: @rem 复制到SOA服务Bin目录 73: copy @RootDirectory\bin\dotnet\AgileIM.Contracts.dll @RootDirectory\appserver\bin\AgileIM.Contracts.dll /y 74: copy @RootDirectory\bin\dotnet\AgileIM.Service.dll @RootDirectory\appserver\bin\AgileIM.Service.dll /y 75: copy @RootDirectory\bin\dotnet\EAS.BPM.Activities.dll @RootDirectory\appserver\bin\EAS.BPM.Activities.dll /y 76: copy @RootDirectory\bin\dotnet\EAS.BPM.BLL.Host.dll @RootDirectory\appserver\bin\EAS.BPM.BLL.Host.dll /y 77: copy @RootDirectory\bin\dotnet\EAS.Configure.exe @RootDirectory\appserver\bin\EAS.Configure.exe /y 78: copy @RootDirectory\bin\dotnet\EAS.Configure.exe.config @RootDirectory\appserver\bin\EAS.Configure.exe.config /y 79: copy @RootDirectory\bin\dotnet\EAS.Data.dll @RootDirectory\appserver\bin\EAS.Data.dll /y 80: copy @RootDirectory\bin\dotnet\EAS.Data.Provider.dll @RootDirectory\appserver\bin\EAS.Data.Provider.dll /y 81: copy @RootDirectory\bin\dotnet\EAS.Data.xml @RootDirectory\appserver\bin\EAS.Data.xml /y 82: copy @RootDirectory\bin\dotnet\EAS.DbInitializer.exe @RootDirectory\appserver\bin\EAS.DbInitializer.exe /y 83: copy @RootDirectory\bin\dotnet\EAS.DbInitializer.exe.config @RootDirectory\appserver\bin\EAS.DbInitializer.exe.config /y 84: copy @RootDirectory\bin\dotnet\EAS.Distributed.dll @RootDirectory\appserver\bin\EAS.Distributed.dll /y 85: copy @RootDirectory\bin\dotnet\EAS.Explorer.BLL.Contracts.dll @RootDirectory\appserver\bin\EAS.Explorer.BLL.Contracts.dll /y 86: copy @RootDirectory\bin\dotnet\EAS.Explorer.BLL.Host.dll @RootDirectory\appserver\bin\EAS.Explorer.BLL.Host.dll /y 87: copy @RootDirectory\bin\dotnet\EAS.Explorer.dll @RootDirectory\appserver\bin\EAS.Explorer.dll /y 88: copy @RootDirectory\bin\dotnet\EAS.Explorer.Entities.dll @RootDirectory\appserver\bin\EAS.Explorer.Entities.dll /y 89: copy @RootDirectory\bin\dotnet\EAS.MicroKernel.dll @RootDirectory\appserver\bin\EAS.MicroKernel.dll /y 90: copy @RootDirectory\bin\dotnet\EAS.Monitor.dll @RootDirectory\appserver\bin\EAS.Monitor.dll /y 91: copy @RootDirectory\bin\dotnet\EAS.NLB.Monitor.exe @RootDirectory\appserver\bin\EAS.NLB.Monitor.exe /y 92: copy @RootDirectory\bin\dotnet\EAS.NLB.Server.exe @RootDirectory\appserver\bin\EAS.NLB.Server.exe /y 93: copy @RootDirectory\bin\dotnet\EAS.NLB.Server.exe.config @RootDirectory\appserver\bin\EAS.NLB.Server.exe.config /y 94: copy @RootDirectory\bin\dotnet\EAS.NLB.Server.x64.exe @RootDirectory\appserver\bin\EAS.NLB.Server.x64.exe /y 95: copy @RootDirectory\bin\dotnet\EAS.SOA.Server.exe @RootDirectory\appserver\bin\EAS.SOA.Server.exe /y 96: copy @RootDirectory\bin\dotnet\EAS.SOA.Server.exe.config @RootDirectory\appserver\bin\EAS.SOA.Server.exe.config /y 97: copy @RootDirectory\bin\dotnet\EAS.SOA.Server.x64.exe @RootDirectory\appserver\bin\EAS.SOA.Server.x64.exe /y 98: copy @RootDirectory\bin\dotnet\EAS.SOA.Server.x64.exe.config @RootDirectory\appserver\bin\EAS.SOA.Server.x64.exe.config /y 99: copy @RootDirectory\bin\dotnet\lua51.x64.dll @RootDirectory\appserver\bin\lua51.x64.dll /y 100: copy @RootDirectory\bin\dotnet\lua51.x86.dll @RootDirectory\appserver\bin\lua51.x86.dll /y 101: copy @RootDirectory\bin\dotnet\LuaInterface.x64.dll @RootDirectory\appserver\bin\LuaInterface.x64.dll /y 102: copy @RootDirectory\bin\dotnet\LuaInterface.x86.dll @RootDirectory\appserver\bin\LuaInterface.x86.dll /y 103: copy @RootDirectory\bin\dotnet\MongoDB.dll @RootDirectory\appserver\bin\MongoDB.dll /y 104: copy @RootDirectory\bin\dotnet\MySql.Data.dll @RootDirectory\appserver\bin\MySql.Data.dll /y 105: copy @RootDirectory\bin\dotnet\RdlEngine.dll @RootDirectory\appserver\bin\RdlEngine.dll /y 106: copy @RootDirectory\bin\dotnet\RdlViewer.dll @RootDirectory\appserver\bin\RdlViewer.dll /y 107: copy @RootDirectory\bin\dotnet\soaserver.start.bat @RootDirectory\appserver\bin\soaserver.start.bat /y 108: copy @RootDirectory\bin\dotnet\soaserver.start.bat @RootDirectory\appserver\bin\install.bat /y 109: copy @RootDirectory\bin\dotnet\soaserver.start.bat @RootDirectory\appserver\bin\uinstall.bat /y 110: copy @RootDirectory\bin\dotnet\System.Data.SQLite.DLL @RootDirectory\appserver\bin\System.Data.SQLite.DLL /y 111: copy @RootDirectory\bin\dotnet\System.Workflow.Activities.dll @RootDirectory\appserver\bin\System.Workflow.Activities.dll /y 112: copy @RootDirectory\bin\dotnet\System.Workflow.ComponentModel.dll @RootDirectory\appserver\bin\System.Workflow.ComponentModel.dll /y 113: copy @RootDirectory\bin\dotnet\System.Workflow.Runtime.dll @RootDirectory\appserver\bin\System.Workflow.Runtime.dll /y 114: copy @RootDirectory\bin\dotnet\WF.Demo.DAL.dll @RootDirectory\appserver\bin\WF.Demo.DAL.dll /y 115:       其中@RootDirectory程序会根据运行时工作目录进行替换,注意:下载的AgileEAS.NET SOA中间件平台的解压目录路径之中最好不要带空格和中文。      接下来我们配置服务端,数据库我们将使用“AgileEAS.NET SOA 中间件平台5.2版本下载、配置学习(一):下载平台并基于直连环境运行一文所建立和初始化的”eas_demo”数据库。      我们运行“AppServer\Bin”目录之中的“EAS.Configure.exe”AgileEAS.NET SOA中间件配置文件生成工具生成服务端配置:      一定要选中“生成SOA分布式服务器配置”和“保存配置到AgileEAS.NET SOA 平台相关配置文件”然后点“下一步”:      填写WCF服务所需要的通信端口号(http和tcp各一个)、以及Socket通信服务的tcp的端口”以及数据库连接信息,然后点“下一步”:      界面上方是根据所设参数生成的配置信息,此处,可以改变配置信息的输出路径,默认为当前目录之中的“EAS.SOA.Server.exe.config”,点击“完成”输出配置:      至此,服务端的配置已经完成,接焉为我们以控件台方式运行一下SOA服务端,运行“AppServer\Bin”目录之中的“soaserver.start.bat”指处理文件:      “soaserver.start.bat”批处理文件是SOA服务的控制台运行脚本,即以控制台模式运行SOA服务端,我们运行如下:      “appServer\Binsoaserver.start.bat”批处理文件其内容如下: 1: EAS.soa.Server.exe -run 2: pause      其本质是“EAS.soa.Server.exe -run”这一旬,EAS.SOA.Server.exe带了一个启动参考 -run,即告诉EAS.SOA.Server.exe以控制台方式运行承载服务,除-run参数之外,EAS.SOA.Server.exe还支持以下参数:      -i 或者/i:向Windows服务控制器安装AgileEAS.NET SOA中间件平台SOA服务。      -u 或者/u:卸载已存在的AgileEAS.NET SOA中间件平台SOA服务。      /name=实例名:在安装、卸载AgileEAS.NET SOA中间件平台SOA服务的时候,告诉服务控制器,要安装什么实例的名称是什么,AgileEAS.NET SOA中间件的服务设计为可以多服务实例运行,即一台电脑上可以运行实例名称为”EAS”、“Demo”、“HIS”、“EMR”、“PACS”等不同的服务实例,类似于SQL的命名实现,当然这个参数是一个可选参考,如果不使用本参数,则安装和卸载默认实例,一台电脑只能安装一个默认实例,比如以下脚本:      “AppServer\Bin\install.bat”脚本 EAS.SOA.Server.exe /i /name=demo pause      表现安装一个实例名称为“demo”的AgileEAS.NET SOA中间件平台SOA服务实例,我们可以执行这个脚本:      我们打开系统管理工具之中的服务管理:      那以在生产环境之中我们就可以通过这种方式部署AgileEAS.NET SOA 中间件平台的SOA服务,服务安装之后会随计算机启动而自动启动,我们可以很方便的通过系统服务管理工具进行启动、停止服务,如果我们不使用这个服务了,我们可以使用以下脚本卸载这个服务:      “AppServer\Bin\uinstall.bat”脚本 1: EAS.SOA.Server.exe /u /name=demo 2: pause      执行脚本如下:      我们运行“appServer\Bin\soaserver.start.bat”启动服务进行下一步配置。 四、配置分布式WinClient客户段      在第三节中我们使用”EAS.Publisher.exe”分发程序分发文件,会自动把客户段运行文件复制到”appServer\xclient\files”之中,那么我们运行”appServer\xclient\files\EAS.Configure.exe”配置程序配置客户端:     选中“生成客户端配置(分布式访问结果)”和“保存配置到AgileEAS.NET SOA 平台相关配置文件”然后点击“下一步”:     这里需要注意的是端口号要根据选择的通信模式和第三节所设置的服务器参数进行决定,tcp对应第三节服务器设置之中的WCF服务之中的Tcp端口号,http对应WCF服务之中的http端口号,socket对应socket服务模式之中的tcp端口号。     点击“下一步”继续:     点击“完成”输出客户端配置到“EAS.WinClient.Start.exe.config”配置文件之中,内容如下: 1: <?xml version="1.0" encoding="utf-8"?> 2: <configuration> 3: <configSections> 4: <section name="eas" type="EAS.ConfigHandler,EAS.MicroKernel" /> 5: </configSections> 6: <!--SQLite运行必需--> 7: <startup useLegacyV2RuntimeActivationPolicy="true"> 8: <supportedRuntime version="v4.0"/> 9: </startup> 10: <eas> 11: <configurations> 12: <item name="Key" value="Value" /> 13: </configurations> 14: <objects> 15: <!--分布式通信组件。--> 16: <object name="ServiceBridger" assembly="EAS.Distributed" type="EAS.Distributed.ServiceBridger" LifestyleType="Thread" > 17: <property name="ServiceName" type="string" value="EAS.RMI.Service" /> 18: </object> 19: <object name="DataAccessor" assembly="EAS.Distributed" type="EAS.Distributed.DataAccessor" LifestyleType="Thread" > 20: <property name="ServiceBridger" type="object" value="ServiceBridger" /> 21: </object> 22: <object name="OrmAccessor" assembly="EAS.Distributed" type="EAS.Distributed.OrmAccessor" LifestyleType="Thread" > 23: <property name="ServiceBridger" type="object" value="ServiceBridger" /> 24: <property name="DataAccessor" type="object" value="DataAccessor" /> 25: </object> 26: <!--日志管理--> 27: <object name="Logger" assembly="EAS.MicroKernel" type="EAS.Loggers.TextLogger" LifestyleType="Singleton" /> 28: <!--资源--> 29: <!--<object name="EAS.Explorer.Resource" assembly="EAS.Explorer.Res" type="EAS.Explorer.Res.Resources" LifestyleType="Singleton" />--> 30: </objects> 31: <services> 32: <service name="EAS.RMI.Service" service-type="WcfService" singleton="true" url="net.tcp://127.0.0.1:6607/eas/services/EAS.RMIService" /> 33: <service name="EAS.Storage.Service" service-type="WcfService" singleton="true" url="net.tcp://127.0.0.1:6607/eas/services/EAS.StorageService" /> 34: </services> 35: </eas> 36: </configuration>     至此为止,我们完成了不带自动升级功能的分布式客户端配置,我们启动客户程序“EAS.WinClient.Start.exe”,并使用账号:Adminstrator,密码:sa登录,看到如下界面:      那么如何分辨程序是以分布式方式运行的呢,我们打开以控件台运行的SOA服务程序CMD窗口,就会看到其中一些消息通信记录: 五、配置自动升级      第四节我们在”appServer\xclient\files”目录之中成功配置了分布式客户端并且成功运行,那么我们”appServer\xclient\files”为基础配置一个自升级服务。      打开”appServer\xclient\files\update.ini”文件进行修改: 1: # AgileEAS.Net 平台升级控件文件。 2:  3: [config] 4:  5: allow = 0 6: application = EAS.WinClient.Start.exe 7: url = net.tcp://localhost:6607/eas/services/EAS.UpdateService     其中allow表示是否升级,url为升级服务地址,地址组成为wcf协议net.tcp://或http://+主机名称为IP+端口号+/eas/services/eas.updateservice,application表示升级完成之后启动运行的程序,我们根据第三节的配置修改如下: 1: # AgileEAS.Net 平台升级控件文件。 2:  3: [config] 4:  5: allow = 1 6: application = EAS.WinClient.Start.exe 7: url = net.tcp://localhost:6607/eas/services/EAS.UpdateService     然后我们删除目录里面的临时文件夹“Data”和“logs”,进行”appServer\xclient”,运行目录之中的”EAS.SmartUpdateConfig.exe“程序:      ”EAS.SmartUpdateConfig.exe“程序是AgileEAS.NET  SOA 中间件平台的升级配置程序,即当我们的应用的程序文件发生了新级和变更,需要把文件复制”appServer\xclient\files”目录之中,并且运行”EAS.SmartUpdateConfig.exe“程序以生成升级配置文件,升级配置文件存储在”appServer\xclient\conig”目录之中的”SmartUpdate.xml“文件之中,其内容如下: 1: <?xml version="1.0" encoding="utf-8"?> 2: <SmartConfig xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 3: <URI>http://www.smarteas.net/</URI> 4: <Name>AgileEAS.NET SOA平台升级配置文件</Name> 5: <Description>用于AgileEAS.NET SOA平台SmartClient/ActiveX运行容器模块升级之用</Description> 6: <StartEx /> 7: <Time>2013-10-16T08:56:44.67765+08:00</Time> 8: <Files> 9: <SmartFile> 10: <FileName>AgileIM.Client.exe</FileName> 11: <Version>1.0.0.0</Version> 12: <Time>2013-10-15T16:59:23.5252+08:00</Time> 13: </SmartFile> 14: <SmartFile> 15: <FileName>AgileIM.Client.exe.config</FileName> 16: <Time>2013-08-27T12:10:12.0756571+08:00</Time> 17: </SmartFile> 18: <SmartFile> 19: <FileName>AgileIM.Contracts.dll</FileName> 20: <Version>1.0.0.0</Version> 21: <Time>2013-10-12T19:50:18.155+08:00</Time> 22: </SmartFile> 23: <SmartFile> 24: <FileName>AgileIM.Service.dll</FileName> 25: <Version>1.0.0.0</Version> 26: <Time>2013-10-15T16:59:24.5722599+08:00</Time> 27: </SmartFile> 28: <SmartFile> 29: <FileName>AxInterop.grdesLib.dll</FileName> 30: <Version>5.0.0.0</Version> 31: <Time>2013-10-12T19:50:02.442+08:00</Time> 32: </SmartFile> 33: <SmartFile> 34: <FileName>AxInterop.grproLib.dll</FileName> 35: <Version>5.0.0.0</Version> 36: <Time>2013-10-12T19:50:02.975+08:00</Time> 37: </SmartFile> 38: <SmartFile> 39: <FileName>EAS.ActiveXForm.ClientClasp.AddIn.dll</FileName> 40: <Version>1.0.0.0</Version> 41: <Time>2013-10-15T17:00:44.6468399+08:00</Time> 42: </SmartFile> 43: <SmartFile> 44: <FileName>EAS.BPM.Activities.dll</FileName> 45: <Version>1.1.0.0</Version> 46: <Time>2013-10-15T16:59:38.4650545+08:00</Time> 47: </SmartFile> 48: <SmartFile> 49: <FileName>EAS.BPM.BLL.Host.dll</FileName> 50: <Version>1.0.0.0</Version> 51: <Time>2013-10-15T17:00:41.6456682+08:00</Time> 52: </SmartFile> 53: <SmartFile> 54: <FileName>EAS.BPM.WinUI.dll</FileName> 55: <Version>2.0.0.0</Version> 56: <Time>2013-10-15T16:59:45.0194294+08:00</Time> 57: </SmartFile> 58: <SmartFile> 59: <FileName>eas.client.ini</FileName> 60: <Time>2013-10-15T21:22:56.5866492+08:00</Time> 61: </SmartFile> 62: <SmartFile> 63: <FileName>EAS.Configure.exe</FileName> 64: <Version>2.0.0.0</Version> 65: <Time>2013-10-15T16:59:27.6444356+08:00</Time> 66: </SmartFile> 67: <SmartFile> 68: <FileName>EAS.Configure.exe.config</FileName> 69: <Time>2013-04-15T19:59:09.4420283+08:00</Time> 70: </SmartFile> 71: <SmartFile> 72: <FileName>EAS.Data.Controls.dll</FileName> 73: <Version>1.0.0.0</Version> 74: <Time>2013-10-15T17:36:07.4252559+08:00</Time> 75: </SmartFile> 76: <SmartFile> 77: <FileName>EAS.Data.dll</FileName> 78: <Version>5.0.0.0</Version> 79: <Time>2013-10-15T16:59:34.241813+08:00</Time> 80: </SmartFile> 81: <SmartFile> 82: <FileName>EAS.Data.Provider.dll</FileName> 83: <Version>5.0.0.0</Version> 84: <Time>2013-10-15T16:59:59.6222646+08:00</Time> 85: </SmartFile> 86: <SmartFile> 87: <FileName>EAS.Distributed.dll</FileName> 88: <Version>5.0.0.0</Version> 89: <Time>2013-10-15T17:00:39.8145635+08:00</Time> 90: </SmartFile> 91: <SmartFile> 92: <FileName>EAS.Explorer.BLL.Contracts.dll</FileName> 93: <Version>5.0.0.0</Version> 94: <Time>2013-10-12T19:50:17.932+08:00</Time> 95: </SmartFile> 96: <SmartFile> 97: <FileName>EAS.Explorer.BLL.Host.dll</FileName> 98: <Version>5.0.0.0</Version> 99: <Time>2013-10-15T17:00:14.297104+08:00</Time> 100: </SmartFile> 101: <SmartFile> 102: <FileName>EAS.Explorer.dll</FileName> 103: <Version>5.0.0.0</Version> 104: <Time>2013-10-12T19:50:16.931+08:00</Time> 105: </SmartFile> 106: <SmartFile> 107: <FileName>EAS.Explorer.Entities.dll</FileName> 108: <Version>5.0.0.0</Version> 109: <Time>2013-10-15T17:00:16.9642565+08:00</Time> 110: </SmartFile> 111: <SmartFile> 112: <FileName>EAS.Explorer.Res.dll</FileName> 113: <Version>1.1.0.0</Version> 114: <Time>2013-10-12T19:50:50.7467432+08:00</Time> 115: </SmartFile> 116: <SmartFile> 117: <FileName>EAS.Explorer.WinUI.dll</FileName> 118: <Version>5.0.0.0</Version> 119: <Time>2013-10-15T16:59:56.5250875+08:00</Time> 120: </SmartFile> 121: <SmartFile> 122: <FileName>EAS.FormDesigner.exe</FileName> 123: <Version>5.0.0.0</Version> 124: <Time>2013-10-15T16:59:46.1954967+08:00</Time> 125: </SmartFile> 126: <SmartFile> 127: <FileName>EAS.GReport.Controls.dll</FileName> 128: <Version>1.0.0.0</Version> 129: <Time>2013-10-15T17:00:07.2997038+08:00</Time> 130: </SmartFile> 131: <SmartFile> 132: <FileName>EAS.MicroKernel.dll</FileName> 133: <Version>5.0.0.0</Version> 134: <Time>2013-10-15T16:59:29.7545563+08:00</Time> 135: </SmartFile> 136: <SmartFile> 137: <FileName>EAS.Monitor.dll</FileName> 138: <Version>1.0.0.0</Version> 139: <Time>2013-10-12T19:50:10.901+08:00</Time> 140: </SmartFile> 141: <SmartFile> 142: <FileName>EAS.NLB.Monitor.exe</FileName> 143: <Version>1.0.0.0</Version> 144: <Time>2013-10-15T17:00:08.143752+08:00</Time> 145: </SmartFile> 146: <SmartFile> 147: <FileName>EAS.NLB.Server.exe</FileName> 148: <Version>1.0.0.0</Version> 149: <Time>2013-10-15T17:00:16.3272201+08:00</Time> 150: </SmartFile> 151: <SmartFile> 152: <FileName>EAS.OrmDesigner.exe</FileName> 153: <Version>5.0.0.0</Version> 154: <Time>2013-10-15T16:58:10.8720445+08:00</Time> 155: </SmartFile> 156: <SmartFile> 157: <FileName>EAS.OrmDesigner.exe.config</FileName> 158: <Time>2012-01-07T11:28:39.2362631+08:00</Time> 159: </SmartFile> 160: <SmartFile> 161: <FileName>EAS.Report.Controls.dll</FileName> 162: <Version>3.0.0.0</Version> 163: <Time>2013-10-15T17:00:11.6179508+08:00</Time> 164: </SmartFile> 165: <SmartFile> 166: <FileName>EAS.SmartUpdater.exe</FileName> 167: <Version>1.0.0.0</Version> 168: <Time>2013-10-15T16:59:54.662981+08:00</Time> 169: </SmartFile> 170: <SmartFile> 171: <FileName>EAS.SOA.Monitor.exe</FileName> 172: <Version>1.0.0.0</Version> 173: <Time>2013-10-15T17:00:20.4044533+08:00</Time> 174: </SmartFile> 175: <SmartFile> 176: <FileName>EAS.ThirdParty.Controls.dll</FileName> 177: <Version>1.0.0.0</Version> 178: <Time>2013-10-12T19:49:55.311+08:00</Time> 179: </SmartFile> 180: <SmartFile> 181: <FileName>EAS.WinClient.dll</FileName> 182: <Version>5.1.0.0</Version> 183: <Time>2013-10-15T17:00:24.8407071+08:00</Time> 184: </SmartFile> 185: <SmartFile> 186: <FileName>EAS.WinClient.Start.exe</FileName> 187: <Version>5.0.0.0</Version> 188: <Time>2013-10-15T16:59:14.0236565+08:00</Time> 189: </SmartFile> 190: <SmartFile> 191: <FileName>EAS.WinClient.Start.exe.config</FileName> 192: <Time>2013-10-15T21:20:03.86277+08:00</Time> 193: </SmartFile> 194: <SmartFile> 195: <FileName>EAS.Windows.dll</FileName> 196: <Version>5.0.0.0</Version> 197: <Time>2013-10-15T17:00:30.9600571+08:00</Time> 198: </SmartFile> 199: <SmartFile> 200: <FileName>EAS.Wpf.Controls.dll</FileName> 201: <Version>1.0.0.0</Version> 202: <Time>2013-10-15T17:00:38.075464+08:00</Time> 203: </SmartFile> 204: <SmartFile> 205: <FileName>grdes50.dll</FileName> 206: <Version>5, 8, 13, 620</Version> 207: <Time>2013-06-24T23:11:32+08:00</Time> 208: </SmartFile> 209: <SmartFile> 210: <FileName>gregn50.dll</FileName> 211: <Version>5, 8, 13, 620</Version> 212: <Time>2013-06-24T23:10:26+08:00</Time> 213: </SmartFile> 214: <SmartFile> 215: <FileName>ICSharpCode.AvalonEdit.dll</FileName> 216: <Version>4.3.1.9429</Version> 217: <Time>2013-10-12T19:50:15.045+08:00</Time> 218: </SmartFile> 219: <SmartFile> 220: <FileName>Interop.grdesLib.dll</FileName> 221: <Version>5.0.0.0</Version> 222: <Time>2013-10-12T19:50:01.56+08:00</Time> 223: </SmartFile> 224: <SmartFile> 225: <FileName>Interop.grproLib.dll</FileName> 226: <Version>5.0.0.0</Version> 227: <Time>2013-10-12T19:50:02.088+08:00</Time> 228: </SmartFile> 229: <SmartFile> 230: <FileName>itextsharp.dll</FileName> 231: <Version>4.1.2.0</Version> 232: <Time>2011-04-19T10:03:14+08:00</Time> 233: </SmartFile> 234: <SmartFile> 235: <FileName>lua51.x64.dll</FileName> 236: <Time>2013-09-30T13:25:51.209+08:00</Time> 237: </SmartFile> 238: <SmartFile> 239: <FileName>lua51.x86.dll</FileName> 240: <Time>2013-09-30T13:27:36.369897+08:00</Time> 241: </SmartFile> 242: <SmartFile> 243: <FileName>LuaInterface.x64.dll</FileName> 244: <Version>2.0.4.24313</Version> 245: <Time>2013-09-30T13:30:27.8847071+08:00</Time> 246: </SmartFile> 247: <SmartFile> 248: <FileName>LuaInterface.x86.dll</FileName> 249: <Version>2.0.4.24313</Version> 250: <Time>2013-09-30T13:30:27.8937076+08:00</Time> 251: </SmartFile> 252: <SmartFile> 253: <FileName>Microsoft.Data.ConnectionUI.Dialog.dll</FileName> 254: <Version>8.0.50727.42 (RTM.050727-4200)</Version> 255: <Time>2011-04-19T14:03:22+08:00</Time> 256: </SmartFile> 257: <SmartFile> 258: <FileName>Microsoft.Data.ConnectionUI.dll</FileName> 259: <Version>8.0.50727.42 (RTM.050727-4200)</Version> 260: <Time>2011-04-19T14:03:22+08:00</Time> 261: </SmartFile> 262: <SmartFile> 263: <FileName>Microsoft.XmlNotepad.dll</FileName> 264: <Version>2.5.3145.19740</Version> 265: <Time>2008-08-11T11:58:04+08:00</Time> 266: </SmartFile> 267: <SmartFile> 268: <FileName>MongoDB.dll</FileName> 269: <Version>0.90.0.1</Version> 270: <Time>2012-03-16T19:11:12.6696083+08:00</Time> 271: </SmartFile> 272: <SmartFile> 273: <FileName>MySql.Data.dll</FileName> 274: <Version>5.0.9.0</Version> 275: <Time>2008-04-14T12:04:28+08:00</Time> 276: </SmartFile> 277: <SmartFile> 278: <FileName>NetronGraphLib.dll</FileName> 279: <Version>2.2.3328.30433</Version> 280: <Time>2009-02-10T16:54:28+08:00</Time> 281: </SmartFile> 282: <SmartFile> 283: <FileName>RdlDesigner.dll</FileName> 284: <Version>3.9.7.0</Version> 285: <Time>2013-10-12T19:50:00.225+08:00</Time> 286: </SmartFile> 287: <SmartFile> 288: <FileName>RdlEngine.dll</FileName> 289: <Version>3.9.7.0</Version> 290: <Time>2013-10-12T19:49:53.522+08:00</Time> 291: </SmartFile> 292: <SmartFile> 293: <FileName>RdlViewer.dll</FileName> 294: <Version>3.9.6.0</Version> 295: <Time>2013-10-12T19:49:56.182+08:00</Time> 296: </SmartFile> 297: <SmartFile> 298: <FileName>System.Data.SQLite.DLL</FileName> 299: <Version>1.0.66.0</Version> 300: <Time>2010-04-18T13:34:12+08:00</Time> 301: </SmartFile> 302: <SmartFile> 303: <FileName>System.Workflow.Activities.dll</FileName> 304: <Version>4.0.30319.1 (RTMRel.030319-0100)</Version> 305: <Time>2010-03-18T19:31:26+08:00</Time> 306: </SmartFile> 307: <SmartFile> 308: <FileName>System.Workflow.ComponentModel.dll</FileName> 309: <Version>4.0.30319.1 (RTMRel.030319-0100)</Version> 310: <Time>2010-03-18T19:31:26+08:00</Time> 311: </SmartFile> 312: <SmartFile> 313: <FileName>System.Workflow.Runtime.dll</FileName> 314: <Version>4.0.30319.1 (RTMRel.030319-0100)</Version> 315: <Time>2010-03-18T19:31:26+08:00</Time> 316: </SmartFile> 317: <SmartFile> 318: <FileName>update.ini</FileName> 319: <Time>2013-10-15T21:32:33.0976238+08:00</Time> 320: </SmartFile> 321: <SmartFile> 322: <FileName>WF.Demo.DAL.dll</FileName> 323: <Version>1.0.0.0</Version> 324: <Time>2013-10-12T19:49:57.9107211+08:00</Time> 325: </SmartFile> 326: <SmartFile> 327: <FileName>WF.Demo.UI.dll</FileName> 328: <Version>1.0.0.0</Version> 329: <Time>2013-10-12T19:50:49.1896541+08:00</Time> 330: </SmartFile> 331: </Files> 332: </SmartConfig>      ”SmartUpdate.xml“文件为平台的升级配置文件,其本质是存储一个文件及其最后修改时间的一个清单,客户端也持有这么一份清单,客户端会依据自己持有的清单与服务器上的清单比对以判定需要升级更新那些文件。       ”appServer\xclient”为AgileEAS.NET SOA 中间件的服务端升级目录,这个路径是不能更改的,在AgileEAS.NET SOA 中间件有服务设计之中更新了硬性的规定,其中”appServer\xclient\files”目录其本质就是客户端的最新复制。      当我们完成以上配置之后,我们来验证一个自动升级是否可以使用,我们把”appServer\xclient\files”复制到其他地方,比如我们复制到“D:\”并重命名为”d:\eas.client”,如下图:      然后我们运行“d:\eas.client\eas.winclient.start.exe”,系统有如下提示:      我们点击“确定”将会启动升级程序进行升级:      升级完成之后点击“关闭”,系统将会自己启动“d:\eas.client\eas.winclient.start.exe”,打开登录窗口:      输入用户:Administrator密码:sa,点击登录,打开主界面: 六、联系我们      为了完善、改进和推广AgileEAS.NET而成立了敏捷软件工程实验室,是一家研究、推广和发展新技术,并致力于提供具有自主知识产权的业务基础平台软件,以及基于业务基础平台了开发的管理软件的专业软件提供商。主要业务是为客户提供软件企业研发管理解决方案、企业管理软件开发,以及相关的技术支持,管理及技术咨询与培训业务。      AgileEAS.NET平台自2004年秋呱呱落地一来,我就一直在逐步完善和改进,也被应用于保险、医疗、电子商务、房地产、铁路、教育等多个应用,但一直都是以我个人在推广,2010年因为我辞职休息,我就想到把AgileEAS.NET推向市场,让更多的人使用。      技术团队成员都是合作多年的老朋友,因为这个平台是免费的,我们的营运开支主要靠为客户提供咨询服务所得,我们都是因为程序员的那种理想与信念坚持,在此我感谢一起奋斗的朋友和一直支持我们工作的客户、朋友。 团队网站:http://www.agilelab.cn, AgileEAS.NET网站:http://www.smarteas.net 官方博客:http://eastjade.cnblogs.com QQ:47920381 AgileEAS.NET QQ群: 113723486(AgileEAS SOA 平台)/上限1000人 199463175(AgileEAS SOA 交流)/上限1000人 120661978(AgileEAS.NET 平台交流)/上限1000人 212867943(AgileEAS.NET研究)/上限500人 147168308(AgileEAS.NET应用)/上限500人 172060626(深度AgileEAS.NET平台)/上限500人 116773358(AgileEAS.NET 平台)/上限500人 125643764(AgileEAS.NET探讨)/上限500人 193486983(AgileEAS.NET 平台)/上限500人 邮件:james@agilelab.cn,mail.james@qq.com, 电话:18629261335。

Tags:

.NET | AgileEAS.NET | C# | ORM | SOA | Socket | 中间件 | 企业应用架构 | 分布式 | 框架 | 消息中间件 | 设计模式 | 下载

AgileEAS.NET SOA 中间件平台 5.2 发布说明

by 魏琼东 2013.10.14 21:15
一、AgileEAS.NET SOA 中间件简介      AgileEAS.NET SOA 中间件平台是一款基于基于敏捷并行开发思想和Microsoft .Net构件(组件)开发技术而构建的一个快速开发应用平台。用于帮助中小型软件企业建立一条适合市场快速变化的开发团队,以达到节省开发成本、缩短开发时间,快速适应市场变化的目的。      AgileEAS.NET SOA中间件平台提供了敏捷快速开发软件工程的最佳实践,通过提供大量的基础支撑功能如IOC、ORM、SOA、分布式体系及敏捷并发开发方法所支撑的插件开发体系,以及提供了大量的实体、数据模型设计生成工具、代码生成工具,用于帮助中小软件开发商快速成长。      AgileEAS.NET平台充分把握目前软件行业快速发展的新趋势,基于敏捷并行开发、快速适应市场这样淳朴的软件工程实践,采用业界广泛使用的Microsoft .Net构件(组件)开发技术实践了这种开发思想,帮助软件企业实现“敏捷变化、快速适合”的目标,从而帮助软件企业在激烈的市场竞争中赢得先机并获得更高的回报。 二、下载 AgileEAS.NET SOA 中间件平台5.2 版本      打开AgileEAS.NET SOA 中间件平台官方网站最新下载栏目:      通过半年时间的客户反馈,我们对AgileEAS.NET SOA中间件进行了部分修改, 形成了5.2版本,相对于之前的5.1版本,我们做了以下的改动:      1).重新设计了ORM的缓存体系,增加了一套ORM对象的增量缓存体系。      2).为ORM体系提供了懒加载机制,懒加载可以从数据库也可以从缓存进行懒加载。      3).修改了一些Linq语言实现上的Bug。      4).对SOA服务、分布式体系进行了精简和整合,合并和裁减了几个有关于分布式通信的程序集。      5).增加了对SOA服务进行负载均衡的支持。      6).重构和简化了Sockt/Tcp通信框架。      7).SOA、分布式通信系统支持Socket通信模式。      8).SOA服务及NLB服务增加了对X64架构的支持。      9).集成对lua脚本语言引擎及配套的编码调试工具。      10).从资源管理平台BLL.Host之中分离了对BPM的支持到独立的程序集,以隔离工作流不能工作对管理功能的影响。      11).调整了Grid++报表系统的部分功能、增加对子报表的功能支持。      12).强化了数据初始化工具、系统配置工具。      13).增加了SOA服务、NLB服务的监控工具。      14).增加了WinForm开发中辅助扩展组件:字典快速录入、自动焦点跳转。      15).增加了DataGridView控件CRUD自动持久化组件,即只需要向DataGridView绑定一个数据源,只可以自动实现当DataGridView增加、删除、修改后数据自动写回功能。      16).调整了工作流部分的API设计。      17).调整了日志系统的部分设计。      18).调整了ActiveXForm运行容器、改变了ActiveXForm的组件升级方式、把原先独立一套的升级改变为使用平台统一的升级工具进行升级,运行服务器容器由原来的IIS环境该由AgileEAS.NET 平台SOA服务容器运行。      19).调整了Silverlight运行容器的设计、服务端运行容器由原来的IIS环境该由AgileEAS.NET 平台SOA服务容器运行。      总结一下就是,5.2与5.1之间没有对平台做过涉及结构上的重大调整,而是把重点放在了对系统稳定性、高性能、应用开发的简单性这些方面,即希望本平台能达到上手执容易、开发方便的目标。 三、AgileEAS.NET SOA 中间件平台5.2 版本发布内容      在AgileEAS.NET SOA 中间件2013第四季度发布计划一文之中曾经简单的向大家介绍了AgileEAS.NET SOA 5.2版本发布的大概时间及大概介绍,AgileEAS.NET SOA 中间件平台5.2版本最大的亮点是在发布平台的同时将会向大家发布部分平台的开源代码及三套平台的案例。      包括以下开发源代码:      1).AgileEAS.NET SOA 中间件平台Silverlight运行容器的源代码、Silverlight版本的工作流系统源代码。      2).AgileEAS.NET SOA 中间件平台采用的RDL 报表系统源代码,包括报表引擎、报表控件、报表设计器,已经过我们的汉化和改进,大量应用于医疗、物流、铁路、电力等行业。      同时,案例源代码由原来的一个增加为3个:      1).AgileEAS.NET SOA 中间件平台-药品商店管理信息系统(DrugShop)源代码,做了大量修改和优化,同步更新到AgileEAS.NET SOA 中间件最新平台。      2).新增加了一个-小型ERP系统(电脑分销)系统(SmartERP),本案例原为某客户为某电脑经销商所开发,后来贡献给我们做为例子之用。      3).AgileEAS.NET SOA 中间件平台Socket通信框架-在线聊天室系统(ChatRoom)源代码,为快速掌握AgileEAS.NET 中间件平台Socket消息通信框架所必备。 四、AgileEAS.NET SOA 中间件平台5.2 开发包介绍 4.1 目录结构      开发人员从AgileEAS.NET官方http://www.smarteas.net网站或者敏捷软件工程实验室网站http://www.agilelab.cn下载到的AgileEAS.NET开发包名称为AgileEAS.NET 5.0.rar。      解压后包含以下文件目录结构:      下面我把各目录做个简单的说明: Bin目录      Bin目录中包含着AgileEAS.NET平台中的所有程序集文件,插件定义、WinForm、SmartClient运行容器、基础类库、开发辅助、配置工具都在这里面。 AppServer目录      发布是其中只有Bin和xClient两个空目录,用于做为SOA服务的运行目录、自动升级的服务端目录。 documents目录      Document目录中包含着AgileEAS.NET SOA中间件平台的介绍、开发指南、使用说明书、类库参考手册等一系列的文档。 example目录     AgileEAS.NET SOA中间件平台提供的一组开发例子,我会用专门的文档对里面的例子介绍。 ActiveXForm.Web目录      ActiveXForm运行容器的部署站点,包含EAS.ActiveXForm的运行站点,以及ActiveXForm运行所必须的客户端IE扫描件、IE插件客户段运行所必须的X509根证书、AcriveXForm客户端运行所必须的配置文件。 Silverlight.src目录      AgileEAS.NET SOA中间件平台Silverlight运行容器的所有源代码,本部分已开源。 RDL Project 3.96目录      AgileEAS.NET SOA中间件平台所集成的RDL报表系统的所有源代码、本部分已开源。 4.2 程序集介绍      在AgileEAS.NET SOA中间件平台开发包的bin目录中提供了70个左右程序集,其涵盖了AgileEAS.NET SOA中间件平台的方方面面,下面我对程序集做一个简单的分类。 基础程序集:      EAS.MicroKernel.dll 微内核程序集,包含接口契约、IOC、SL、及服务容器的定义。      EAS.Data.dll 提供统一的数据访问和ORM。      EAS.Web.dll Web开发扩展(针对应用程序和模块接口)。      EAS.Windows.dll WinForm/WFP开发扩展、及一些预定义控件。 资源管理平台:      EAS.Explorer.dll 资源管理平台基础组件。      EAS.Explorer.Entities.dll 资源管理平台实体定义。      EAS.Explorer.BLL.Contracts.dll 资源管理平台业务/服务接口契约      EAS.Explorer.BLL.Host.dll 资源管理平台业务/服务实现      EAS.Explorer.Res.dll 外壳资源(可替换)。      EAS.Explorer.Web.dll 运行容器之Web基础。      EAS.Explorer.WinUI.dll 基于WinForm的平台管理功能实现。      EAS.WinClient.dll WinForm/WPF运行容器。      EAS.WinClient.Start.exe WinForm/WPF运行容器引导程序。 ActiveXForm:      EAS.ActiveXForm.ClientClasp.dll 客户端钩子(包含IE中运行的三个ActiveX控件)。      EAS.ActiveXForm.ClientClasp.AddIn.dll 客户端插件。 智能升级:      EAS.SmartUpdater.exe 智能升级引导程序。      EAS.SmartUpdate.Config.exe 智能升级配置程序。 分布式服务:      EAS.Distributed.dll 分布式访问客户端。      EAS.Monitor.dll SOA服务、负载均衡服务监控定义。      EAS.SOA.Server.exe SOA服务主程序。      EAS.SOA.Server.X64.exe SOA服务64位主程序。      EAS.NLB.Server.exe 负载均衡服务主程序。      EAS.SOA.Monitor.exe SOA服务监控程序。      EAS.NLB.Monitor.exe 负载均衡服务监控程序。 报表系统:      RdlEngine.dll    RDL引擎(开源项目)。      RdlViewer.dll    RDL展示组件(开源项目)。      RdlDesigner.dll RDL设计组件。      EAS.Report.Controls.dll 报表打印组件。      EAS.GReport.Controls.dll Grid++打印组件。 开发辅助:      EAS.OrmDesigner.exe 数据对象(ORM)设计器。      EAS.FormDesigner.exe 快速界面设计器。 初始化、配置工具:      EAS.DbInitializer.exe 平台数据库初始化工具。      EAS.Configure.exe 快速配置文件定义工具。 工作流平台:      EAS.BPM.Activities.dll 工作流活动定义。      EAS.BPM.Host.dll 工作流服务实现。      EAS.BPM.WinUI.dll 工作流平台管理UI。 Silverlight平台:      EAS.MicroKernel.dll 微内核。      EAS.Data.dll 数据访问、Linq。      EAS.Controls.dll 基础控件。      EAS.ReportViewer.dll 报表浏览控件。 其他:      EAS.Data.Provider.dll 数据访问提供者扩展,通过扩展实现ORACLE、MySql、Sqlite数据库的支持。 第三方组件:      System.Workflow.Activities.dll WF3.5基础组件。      System.Workflow.ComponentModel.dll WF3.5基础组件。      System.Workflow.Runtime.dll WF3.5基础组件。      EAS.ThirdParty.Controls.dll 第三方开源控件源代码      NetronGraphLib.dll 图像组件。      ICSharpCode.AvalonEdit.dll.dll      Microsoft.Data.ConnectionUI.Dialog.dll      Microsoft.Data.ConnectionUI.dll      Microsoft.XmlNotepad.dll 4.3 文档部分      AgileEAS.NET SOA中间件平台是一个快速开发平台,是一组中间件,业主要目录的是提供开发人员的开发效率,要充分了解并且学习AgileEAS.NET平台的快速开发实践和充分的利用AgileEAS.NET平台所提供的快速开发工具。      如何快速去学习和理解AgileEAS.NET SOA中间件平台呢,我们提供了大量的文档和例程,文档是AgileEAS.NET SOA中间件平台的组成部分,更是程序员熟悉AgileEAS.NET SOA中间件平台的窗户。AgileEAS.NET平台开发包中提供了《AgileEAS.NET SOA中间件平台技术说明书 》、《AgileEAS.NET SOA中间件平台开发指南》、《AgileEAS.NET SOA中间件平台系统管理使用教程》、《AgileEAS.NET SOA中间件平台开发辅助工具使用教程》、《AgileEAS.NET SOA中间件平台安装说明书》、《AgileEAS.NET SOA中间件平台数据库设计说明书(SQLServer)》、《AgileEAS.NET SOA中间件平台数据库设计说明书(Oracle)》等文档以及AgileEAS.NET SOA中间件平台基础类库参考手册。 4.4 示例部分      AgileEAS.NET SOA中间件平台5.2版本将会发布三个应用案例,但是这三个案例都不会和AgileEAS.NET 5.2发布包打包在一进行下载,而是在AgileEAS.NET SOA 中间件平台官方网站最新下载栏目设有专门的下载链接进行下载。 五、学习和配置文档 AgileEAS.NET SOA 中间件平台5.2版本下载、配置学习(一):下载平台并基于直连环境运行 AgileEAS.NET SOA 中间件平台5.2版本下载、配置学习(二):配置WinClient分布式运行环境 AgileEAS.NET SOA 中间件平台5.2版本下载、配置学习(三):配置ActiveXForm运行环境 AgileEAS.NET SOA 中间件平台5.2版本下载、配置学习(四):开源的Silverlight运行容器的编译、配置 六、联系我们      为了完善、改进和推广AgileEAS.NET而成立了敏捷软件工程实验室,是一家研究、推广和发展新技术,并致力于提供具有自主知识产权的业务基础平台软件,以及基于业务基础平台了开发的管理软件的专业软件提供商。主要业务是为客户提供软件企业研发管理解决方案、企业管理软件开发,以及相关的技术支持,管理及技术咨询与培训业务。      AgileEAS.NET平台自2004年秋呱呱落地一来,我就一直在逐步完善和改进,也被应用于保险、医疗、电子商务、房地产、铁路、教育等多个应用,但一直都是以我个人在推广,2010年因为我辞职休息,我就想到把AgileEAS.NET推向市场,让更多的人使用。      技术团队成员都是合作多年的老朋友,因为这个平台是免费的,我们的营运开支主要靠为客户提供咨询服务所得,我们都是因为程序员的那种理想与信念坚持,在此我感谢一起奋斗的朋友和一直支持我们工作的客户、朋友。 团队网站:http://www.agilelab.cn, AgileEAS.NET网站:http://www.smarteas.net 官方博客:http://eastjade.cnblogs.com QQ:47920381 AgileEAS.NET QQ群: 113723486(AgileEAS SOA 平台)/上限1000人 199463175(AgileEAS SOA 交流)/上限1000人 120661978(AgileEAS.NET 平台交流)/上限1000人 212867943(AgileEAS.NET研究)/上限500人 147168308(AgileEAS.NET应用)/上限500人 172060626(深度AgileEAS.NET平台)/上限500人 116773358(AgileEAS.NET 平台)/上限500人 125643764(AgileEAS.NET探讨)/上限500人 193486983(AgileEAS.NET 平台)/上限500人 邮件:james@agilelab.cn,mail.james@qq.com, 电话:18629261335。

Tags:

.NET | AgileEAS.NET | C# | ORM | SAAS | SOA | Socket | 中间件 | 企业应用架构 | 分布式 | 消息中间件 | 设计模式

AgileEAS.NET SOA 中间件平台.Net Socket通信框架-完整应用例子-在线聊天室系统-下载配置

by 魏琼东 2013.10.12 11:58
一、AgileEAS.NET SOA中间件Socket/Tcp框架介绍      在文章AgileEAS.NET SOA 中间件平台Socket/Tcp通信框架介绍一文之中我们对AgileEAS.NET SOA中间Socket/Tcp框架进行了总体的介绍,我们知道 AgileEAS.NET SOA中间件Socket/Tcp框架是一套Socket通信的消息中间件: 二、简单的服务器客户段消息应答      在文章AgileEAS.NET SOA 中间件平台Socket/Tcp通信框架-简单例子-实现简单的服务端客户端消息应答中我们实现了一个简单的客户端消息请求==>服务端应答的简单的Socket应用。 三、完整的应用-实现完整的聊天室      本文我们将实现一个多人聊天室的应用,类似于早年的网络聊天室或者当年的QQ网络聊天室或者游戏里面的聊天功能,聊到室主界面如下:      聊天室支持公聊和私聊频道,理论上可以支持几百甚至几千人,具体上限没有经过测试,在这个案例之中,大家将会掌握基于AgileEAS.NET SOA中间件Socket/Tcp框架的比较复杂的消息定义及消息处理及消息协调,同时还会掌握如何管理服务端的链接、聊天室用户在线状态、消息的多目标转发等功能。      本案例的可执行客户端程序和服务端已经在我们的服务器上为大家部署了一套,大家可以下载客户段http://112.74.66.105/downloads/eas/examples/chat.client.rar体验,下载客户端压缩包之后解压缩,注册一个账号就可以使用这个账号登录我们为大家搭建的聊天室服务端。 三、下载源代码编译配置运行      本案例源代码请通AgileEAS.NET SOA中间件官方网站的最新下载中的栏目进行下载或者从SVN中获取最新版本的源代码: 下载或者SVN-OUT得到代码之后我们来看一下代码文建构: 一级目录 二级目录 说明 Code   程序源代码   Entities 实体(ORM)代码   BLL.Contracts 业务契约定义代码   BLL.Host 数据实现代码   Messages Socket通信消息定义   Services Socket服务定义   ChatRoom 客户段程序代码   UserManage 注册用户管理代码 db   用户数据库文件,Sqlite数据库 Documents   文档,用户模型文档 Publish   引用程序集及编译输出            然后用VS2010或者VS2012打开Code目录之中的ChatRoom解决方案进行编译,编译写成之后我们开始进行配置。      打开Publish目录之中的EAS.SOA.Server.exe.config进行服务端配置:      其中最重要的配置就是配置服务端sqlite数据库文件的路径,以及端口号,当然端口号是可以不用修改的,配置完成之后我们启动Publish目录之中的soaserver.start.bat指指理文件来启动聊天室服务端:      启动聊天室服务端的本质是启动AgileEAS.NET SOA 中间件SOA服务,在SOA服务之中我们集成了Socket插件服务系统,我们的聊天室做为一个SOA的Socket插件服务被进行加载和处理,需要说明的是如果你的运行环境是Win7或者Win2008操作系统,需要以管理员权限运行启动脚本: 接下来我们配置客户段,打开ChatingRoom.MainClient.exe.config文件,修改以下地方:     这样我们变完成了聊天室客户端的配置,运行ChatingRoom.MainClient.exe程序启动客户端的登录窗口:     点用户注册注册一个新用户:     注册成功之后使用这个用户登录聊天室:      到时为止,聊天室案例的配置过程到此完成! 四、源代码学习      要学习和研究本案例的源代码,请参考:      1.AgileEAS.NET SOA 中间件平台Socket/Tcp通信框架介绍      2.AgileEAS.NET SOA 中间件平台Socket/Tcp通信框架-简单例子-实现简单的服务端客户端消息应答      在之后的文章之中我们将会对本案例源代码进行分析。 五、特别感谢      感谢团队成员计文忻同学为大家编写了本案例的第一版本,之后我在通信和界面上做了一些小的调整,也感谢王涛同学为本应用案例提供了Banner图片和一些界面美工建议,也感谢在此案例进行测试和提出建议的客户和小伙伴们。 六、联系我们      为了完善、改进和推广AgileEAS.NET而成立了敏捷软件工程实验室,是一家研究、推广和发展新技术,并致力于提供具有自主知识产权的业务基础平台软件,以及基于业务基础平台了开发的管理软件的专业软件提供商。主要业务是为客户提供软件企业研发管理解决方案、企业管理软件开发,以及相关的技术支持,管理及技术咨询与培训业务。      AgileEAS.NET平台自2004年秋呱呱落地一来,我就一直在逐步完善和改进,也被应用于保险、医疗、电子商务、房地产、铁路、教育等多个应用,但一直都是以我个人在推广,2010年因为我辞职休息,我就想到把AgileEAS.NET推向市场,让更多的人使用。      我的技术团队成员都是合作多年的老朋友,因为这个平台是免费的,所以也没有什么收入,都是由程序员的那种理想与信念坚持,在此我感谢一起奋斗的朋友。 团队网站:http://www.agilelab.cn, AgileEAS.NET网站:http://www.smarteas.net 官方博客:http://eastjade.cnblogs.com QQ:47920381,AgileEAS.NET QQ群:113723486(AgileEAS SOA 平台)/上限1000人 199463175(AgileEAS SOA 交流)/上限1000人 120661978(AgileEAS.NET 平台交流)/上限1000人 212867943(AgileEAS.NET研究)/上限500人 147168308(AgileEAS.NET应用)/上限500人 172060626(深度AgileEAS.NET平台)/上限500人 116773358(AgileEAS.NET 平台)/上限500人 125643764(AgileEAS.NET探讨)/上限500人 193486983(AgileEAS.NET 平台)/上限500人 邮件:james@agilelab.cn,mail.james@qq.com, 电话:18629261335。

Tags:

.NET | AgileEAS.NET | C# | SOA | Socket | 中间件 | 应答 | 框架 | 消息中间件 | 通信框架 | 聊天室

AgileEAS.NET SOA 中间件平台.Net Socket通信框架-介绍

by 魏琼东 2013.10.11 16:11
一、前言      AgileEAS.NET SOA 中间件平台是一款基于基于敏捷并行开发思想和Microsoft .Net构件(组件)开发技术而构建的一个快速开发应用平台。用于帮助中小型软件企业建立一条适合市场快速变化的开发团队,以达到节省开发成本、缩短开发时间,快速适应市场变化的目的。      AgileEAS.NET SOA中间件平台提供了敏捷快速开发软件工程的最佳实践,通过提供大量的基础支撑功能如IOC、ORM、SOA、分布式体系及敏捷并发开发方法所支撑的插件开发体系,以及提供了大量的实体、数据模型设计生成工具、代码生成工具,用于帮助中小软件开发商快速成长。      AgileEAS.NET平台充分把握目前软件行业快速发展的新趋势,基于敏捷并行开发、快速适应市场这样淳朴的软件工程实践,采用业界广泛使用的Microsoft .Net构件(组件)开发技术实践了这种开发思想,帮助软件企业实现“敏捷变化、快速适合”的目标,从而帮助软件企业在激烈的市场竞争中赢得先机并获得更高的回报。 二、关于Socket/Tcp框架的需求      在AgileEAS.NET SOA 中间件平台在大量客户的使用过程之中,有的客户提出了一些基于“消息推”、和应用系统事件通知的需求,比如在“医院信息系统”、“电子病历系统‘、”区域公共卫生平台“、等系统之中就提供了这样的需求,比如当大夫为病人开立了医嘱之后、需要在相关护理人员即时提示,之前大家都使用数据库刷新,数据库的压力都比较大,所以迫切的提出了这样的需求。      另外一个原因是AgileEAS.NET SOA 中间件平台之前一直使用WCF、WS、Romotinig通信做为SOA分布式架构的通信基础,我们在考虑WS、WCF的某些协议并不能提供给我们非常高效的通信,所以我们也需要有一套直接基于Socket/TCP的通信体系用于支撑我们的SOA分布式服务业务体系。 三、AgileEAS.NET SOA 中间件Socket/Tcp框架结构      AgileEAS.NET SOA中间件需要的Socket/Tcp框架严格意思是需要的基于Socket的通信消息中件间,其所提供的功能本质是对消息的处理,所以其所提供的API有三大类、Socket框架本身、消息框架及消息处理框架,以下是AgileEAS.NET SOA中间件的Socket/Tcp的应用框架结构:      各上图我们可以看到AgileEAS.NET SOA中间件需要的Socket/Tcp框架实现了这么一件有意思的事,把原生的Socekt基于数据流的流式通信模式转换为基于消息的消息通信模式,让开发人员多复杂的系统Socket通信和数据流处理之中解放出来,转而关心高层通信消息的设计和消息处理的业务设计与实现。 三、AgileEAS.NET SOA 中间件Socket/Tcp框架重要的接口和类      AgileEAS.NET SOA中间件需要的Socket/Tcp框架严格意思是需要的基于Socket的通信消息中件间,其所提供的功能本质是对消息的处理,所以其所提供的API有三大类、Socket框架本身、消息框架及消息处理框架,以下是AgileEAS.NET SOA中间件的Socket/Tcp的应用框架结构:      其中ISocketCient接口为客户段功能封装,其定义大体如下: 1: /// <summary> 2: /// Tcp客户端接口。 3: /// </summary> 4: public interface ISocketClient : ISocketEngine 5: { 6: /// <summary> 7: /// 客户端状态。 8: /// </summary> 9: ClientState ClientState 10: { 11: get; 12: } 13:  14: /// <summary> 15: /// 连接Tcp服务器。 16: /// </summary> 17: bool Connect(); 18:  19: /// <summary> 20: /// 关闭与服务器的连接。 21: /// </summary> 22: void Close(); 23:  24: /// <summary> 25: /// 发送消息。 26: /// </summary> 27: /// <param name="message">消息。</param> 28: void Send(IMessage message); 29:  30: /// <summary> 31: /// 调用消息,用于服务器/客户端应用中的请示==》响应消息的应用。 32: /// </summary> 33: /// <param name="request">请示消息。</param> 34: /// <returns>服务器返回的响应消息。</returns> 35: IMessage Invoke(IMessage request); 36:  37: /// <summary> 38: /// 异步调用消息,用于服务器/客户端应用中的请示==》响应消息的应用。 39: /// </summary> 40: /// <param name="request">请示消息。</param> 41: /// <returns>包含响应消息的异步任务。</returns> 42: NetInvokeTask BeginInvoke(IMessage request); 43:  44: /// <summary> 45: /// 服务器发生错误时触发。 46: /// </summary> 47: event ErrorEventHandler Error; 48:  49: /// <summary> 50: /// 连接服务器后触发。 51: /// </summary> 52: event EventHandler Connected; 53:  54: /// <summary> 55: /// 断开服务器连接后触发。 56: /// </summary> 57: event EventHandler Closed; 58: }      其是最重要方法为void Send(IMessage message)方法,即发送一个消息到服务器,这个方法也是对使用者开放的最重要方法,在这里发送的不是字节流,而是一个实现了IMessage接口的消息对象,当服户段接收到IMessage对象之后会调用与其对应的消息处理器(IMessageHandler)对象进行消息处理,反之客户段收到IMessage也会调用与其相关的消息处理器(IMessageHandler)对象进行处理。      ISocketServer、ISocketServerBase接口: 1: /// <summary> 2: /// Socket服务器基类接口。 3: /// </summary> 4: public interface ISocketServerBase : ISocketEngine 5: { 6: /// <summary> 7: /// 客户端会话集合。 8: /// </summary> 9: IList<NetSession> Sessions 10: { 11: get; 12: } 13:  14: /// <summary> 15: /// 注册了一个新会话后发生。 16: /// </summary> 17: event NetSessionEventHandler SessionStarted; 18:  19: /// <summary> 20: /// 某一个会话结束后发生。 21: /// </summary> 22: event NetSessionEventHandler SessionAbandoned; 23:  24: /// <summary> 25: /// 发送消息。 26: /// </summary> 27: /// <param name="target">消息接收方ID(会话ID)。</param> 28: /// <param name="message">消息。</param> 29: void Send(Guid target, IMessage message); 30:  31: /// <summary> 32: /// 发送网络消息。 33: /// </summary> 34: /// <param name="target">消息接收方ID(会话ID)。</param> 35: /// <param name="netMessage">网络消息。</param> 36: void Send(Guid target, NetMessage netMessage); 37:  38: /// <summary> 39: /// 发送网络报文(仅网关模式有效)。 40: /// </summary> 41: /// <param name="target">消息接收方ID(会话ID)。</param> 42: /// <param name="netPacket">网络报文。</param> 43: void Send(Guid target, NetPacket netPacket); 44:  45: /// <summary> 46: /// 发送网络数据(仅网关模式有效)。 47: /// </summary> 48: /// <param name="target">消息接收方ID(会话ID)。</param> 49: /// <param name="buffer">网络数据。</param> 50: void Send(Guid target, byte[] buffer); 51: } 1: /// <summary> 2: /// Socket服务器接口。 3: /// </summary> 4: public interface ISocketServer : ISocketServerBase 5: { 6: /// <summary> 7: /// 客户端连接数。 8: /// </summary> 9: int ClientCount 10: { 11: get; 12: } 13:  14: /// <summary> 15: /// 服务器状态。 16: /// </summary> 17: ServerState ServerState 18: { 19: get; 20: } 21:  22: /// <summary> 23: /// 开始Tcp服务器。 24: /// </summary> 25: void StartServer(); 26:  27: /// <summary> 28: /// 停止Tcp服务器。 29: /// </summary> 30: void StopServer(); 31:  32: /// <summary> 33: /// 关闭指定客户的连接。 34: /// </summary> 35: /// <param name="client">客户Guid。</param> 36: void AbandonSession(System.Guid client); 37:  38: /// <summary> 39: /// 服务器发生错误时触发。 40: /// </summary> 41: event ServerErrorEventHandler ServerError; 42:  43: /// <summary> 44: /// 服务器启动后触发。 45: /// </summary> 46: event System.EventHandler ServerStarted; 47:  48: /// <summary> 49: /// 服务器停止后触发。 50: /// </summary> 51: event System.EventHandler ServerStopped; 52: }      这两个接口定义了SocketServer的一些行为和属性,其中最重要的方法还是void Send(Guid target, IMessage message),实现向某个特定客户段连接发送应用消息,别外定义了一个IList<NetSession> Sessions属性,表示目前连接到此SocketServer的所有客户端会话信息。      NetSession表示服务器的一个客户段连接会话,包括连接上下文信息和连接的Socket通信对象,当某个SocketClient发送给SocketServer的信息都会被与其应对的NetSession进行处理,NetSession定义两个重要的方法public void Reply(uint requestID, IMessage message)和public void Abandon(),其中Reply表示向客户端回复一个消息,Abandon表示服务器强制中止此会话。      在整个Socket/tcp框架之中进行通信的最基本单元都是IMessage,那么SocketClient、SocketServer接收到IMessage如何处理呢,答案是由与之配对的IMessageHandler进行处理,所以SocketClient、SocketServer都实现了一个基础接口ISocketEngine: 1: /// <summary> 2: /// Socket引擎,Socket网络通信基础类。 3: /// </summary> 4: public interface ISocketEngine : IDisposable 5: { 6: /// <summary> 7: /// 通信引擎的全局唯一标识符号。 8: /// </summary> 9: System.Guid Guid 10: { 11: get; 12: } 13:  14: /// <summary> 15: /// IP地址和端口号。 16: /// </summary> 17: IPEndPoint IPEndPoint 18: { 19: get; 20: set; 21: } 22:  23: /// <summary> 24: /// IP地址。 25: /// </summary> 26: string IPAddress 27: { 28: get; 29: set; 30: } 31:  32: /// <summary> 33: /// 端口号。 34: /// </summary> 35: int Port 36: { 37: get; 38: set; 39: } 40:  41: /// <summary> 42: /// 报文最大长度。 43: /// </summary> 44: int MessageMaxSize 45: { 46: get; 47: } 48:  49: /// <summary> 50: /// 注册消息处理器。 51: /// </summary> 52: /// <typeparam name="T">消息类型。</typeparam> 53: /// <param name="hander">消息处理器。</param> 54: void AddHander<T>(IMessageHandler<T> hander) where T : IMessage; 55:  56: /// <summary> 57: /// 通过Socket发送数据之后触发。 58: /// </summary> 59: event SocketDataHandler SocketDataSend; 60:  61: /// <summary> 62: /// 通过Socket接收数据之后触发。 63: /// </summary> 64: event SocketDataHandler SocketDataReceived; 65:  66: /// <summary> 67: /// 发送报文完成之后触发。 68: /// </summary> 69: event PacketHandler PacketSend; 70:  71: /// <summary> 72: /// 报文接收完成之后触发。 73: /// </summary> 74: event PacketHandler PacketReceived; 75:  76: /// <summary> 77: /// 载送完一个NetMessage之后触发。 78: /// </summary> 79: event NetMessageHandler NetMessageSend; 80:  81: /// <summary> 82: /// 接收完一个NetMessage之后触发。 83: /// </summary> 84: event NetMessageHandler NetMessageReceived; 85:  86: /// <summary> 87: /// 消息发送完成之后触发。 88: /// </summary> 89: event MessageHandler MessageSend; 90:  91: /// <summary> 92: /// 接收消息完成之后触发。 93: /// </summary> 94: event MessageHandler MessageReceived; 95: }      其中方法void AddHander<T>(IMessageHandler<T> hander) where T : IMessage实现对消息处理器的注册,以便收到IMessage之后选择合适的处理器进行处理。 四、消息和消息处理器      从以上的介绍我们可以明确的知道AgileEAS.NET SOA中间件Socket/Tcp框架是的一个基于消息对象的消息通信框架,那么其最核心的业务就是定义消息及消息的处理思路,我们称之为消息及消息处理器结构:      其中IMessage接口为Socket/Tcp框架中最重要的接口,所有高层的应用消息都需要实现本接口: 1: /// <summary> 2: /// 消息接口定义。 3: /// </summary> 4: /// <remarks> 5: /// 这里所说的消息是指业务处理的最小单元,而不是传输于网络之间的网络消息。 6: /// </remarks> 7: public interface IMessage 8: { 9: /// <summary> 10: /// 从指定的 MessageReader加载消息对象。 11: /// </summary> 12: /// <param name="reader">消息读取器。</param> 13: void Load(BufferReader reader); 14:  15: /// <summary> 16: /// 将消息对象保存到指定的MessageWriter。 17: /// </summary> 18: /// <param name="writer">消息编写器。</param> 19: void WriteTo(BufferWriter writer); 20: }      其中Load和WriteTo实现IMessage消息对象实例与字节流之间进行相互转换,Load消息用于从字节流之中读取并实例化消息、WriteTo把消息转换为流写入消息流之中,在应用开发过程之中必须实现这两个方法并且在消息类上打上MessageAttribute标记: 1: /// <summary> 2: /// 消息ID属性。 3: /// </summary> 4: /// <remarks> 5: /// 标记网络消息,确定其唯一的ID。 6: /// </remarks> 7: [AttributeUsage(AttributeTargets.Class)] 8: public class MessageAttribute : Attribute 9: { 10: /// <summary> 11: /// 初始化MessageAttribute对象实例。 12: /// </summary> 13: /// <param name="messageID">消息ID。</param> 14: public MessageAttribute(string messageID) 15: :this(messageID,string.Empty) 16: { 17:  18: } 19:  20: /// <summary> 21: /// 初始化MessageAttribute对象实例。 22: /// </summary> 23: /// <param name="messageID">消息ID。</param> 24: /// <param name="description">消息说明。</param> 25: public MessageAttribute(string messageID, string description) 26: { 27: this.MessageID = new Guid(messageID); 28: this.Description = description; 29: } 30:  31: /// <summary> 32: /// 消息ID。 33: /// </summary> 34: public Guid MessageID 35: { 36: get; 37: set; 38: } 39:  40: /// <summary> 41: /// 消息说明。 42: /// </summary> 43: public string Description 44: { 45: get; 46: set; 47: } 48: }      MessageAttribute标记用于向已实现IMessage接口的具体消息的消息ID与消息说明,即向Socket通信框架声音本消息的唯一性之用,其中MessageID为一个GUID对象,GUID对象理论上是唯一的,我们可以表示消息的唯一性,以下是一个具体的消息例子: 1: /// <summary> 2: /// 用户登录消息。 3: /// </summary> 4: [Message("F42433DF-2D4D-4514-9523-2FE911E63CAA", "登录消息")] 5: [Serializable] 6: public class LoginMessage : IMessage 7: { 8: /// <summary> 9: /// 用户名。 10: /// </summary> 11: public string LoginID 12: { 13: get; 14: set; 15: } 16:  17: /// <summary> 18: /// 密码。 19: /// </summary> 20: public string PassWord 21: { 22: get; 23: set; 24: } 25:  26: #region IMessage 成员 27:  28: /// <summary> 29: /// 30: /// </summary> 31: /// <param name="reader"></param> 32: public void Load(EAS.IO.BufferReader reader) 33: { 34: LoginID = reader.ReadString(); 35: PassWord = reader.ReadString(); 36: } 37:  38: /// <summary> 39: /// 40: /// </summary> 41: /// <param name="writer"></param> 42: public void WriteTo(EAS.IO.BufferWriter writer) 43: { 44: writer.Write(LoginID); 45: writer.Write(PassWord); 46: } 47:  48: #endregion 49: }      以上是一个具体消息的例子,其表明消息ID为“F42433DF-2D4D-4514-9523-2FE911E63CAA”,其作用是登录消息,用于实现类似登录业务。 五、可靠的消息中间件      AgileEAS.NET SOA中间件Socket/Tcp框架是一个可靠的消息中间件,在设计过程之初就选择了完成端口模型进行开发,以保证服务的高并发和吞吐量,在底层消息通信上,我们选择了不超过8K的可变大小通信报文,比如当一个高层的IMeesage只有512字节内容的时候,会取转成一个一个远小于8K的报文进行发送,如果一个高层IMeesage为66K时,会被分解成为9条消息报文进行通信,前8条消息报文长度为8K,最后一条不满足8K,接收文收到这9条报文后组合并转换为IMeesage对象之后交由消息处理器IMeeesgaHandler进行处理。      在进行消息报文收发过程之中,经过长期测试、验证、设计和选择了高性能的防粘包设计,避免应用开发者头疼的消息粘包问题。 六、AgileEAS.NET SOA中间件需要的Socket/Tcp框架下载      AgileEAS.NET SOA中间件Socket/Tcp框架包含在AgileEAS.NET SOA中间件平台之中,具体定义在EAS.MicroKernel.dll程序集之中,要使用AgileEAS.NET SOA中间件Socket/Tcp框架进行基于Socket的通信开发,请通过AgilleEAS.NET SOA 中站件平台官方网站的最新下载页面下载。 七、联系我们      为了完善、改进和推广AgileEAS.NET而成立了敏捷软件工程实验室,是一家研究、推广和发展新技术,并致力于提供具有自主知识产权的业务基础平台软件,以及基于业务基础平台了开发的管理软件的专业软件提供商。主要业务是为客户提供软件企业研发管理解决方案、企业管理软件开发,以及相关的技术支持,管理及技术咨询与培训业务。      AgileEAS.NET平台自2004年秋呱呱落地一来,我就一直在逐步完善和改进,也被应用于保险、医疗、电子商务、房地产、铁路、教育等多个应用,但一直都是以我个人在推广,2010年因为我辞职休息,我就想到把AgileEAS.NET推向市场,让更多的人使用。      我的技术团队成员都是合作多年的老朋友,因为这个平台是免费的,所以也没有什么收入,都是由程序员的那种理想与信念坚持,在此我感谢一起奋斗的朋友。 团队网站:http://www.agilelab.cn, AgileEAS.NET网站:http://www.smarteas.net 官方博客:http://eastjade.cnblogs.com QQ:47920381,AgileEAS.NET QQ群:113723486(AgileEAS SOA 平台)/上限1000人 199463175(AgileEAS SOA 交流)/上限1000人 120661978(AgileEAS.NET 平台交流)/上限1000人 212867943(AgileEAS.NET研究)/上限500人 147168308(AgileEAS.NET应用)/上限500人 172060626(深度AgileEAS.NET平台)/上限500人 116773358(AgileEAS.NET 平台)/上限500人 125643764(AgileEAS.NET探讨)/上限500人 193486983(AgileEAS.NET 平台)/上限500人 邮件:james@agilelab.cn,mail.james@qq.com, 电话:18629261335。

Tags:

AgileEAS.NET | SAAS | SOA | 中间件 | 企业应用架构 | 分布式 | 框架 | Socket | 消息中间件 | 通信框架

最新评论

声明

本博所有网友评论不代表本博立场,版权归其作者所有。

© Copyright 2011