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.11 20:07
一、AgileEAS.NET SOA中间件Socket/Tcp框架介绍      在文章AgileEAS.NET SOA 中间件平台Socket/Tcp通信框架介绍一文之中我们对AgileEAS.NET SOA中间Socket/Tcp框架进行了总体的介绍,我们知道 AgileEAS.NET SOA中间件Socket/Tcp框架是一套Socket通信的消息中间件: 二、简单例子-实现简单的服务器客户段消息应答      我们接下来实现一个简单的例子,例子的场景非常的简单,客户端向服务端发送一个请求消息,服务段收到消息之后显示消息内容,并对客户端发送一个应答消息,客户端收到应答消息之后显示这个应答消息,对于本例子,我们使用WinForm应用来实现。 三、一步一步实现      首先我们下载AgileEAS.NET SOA 中间件最新版本5.0/5.1,下载地址:http://www.smarteas.net/page/EAS_NET_Downloads.aspx。      首先我们打开VS2010或者VS2010创建一个类为项目Socket.Demo.Messages:      删除默认的Class1.cs,引用AgileEAS.NET SOA 中间件的EAS.MicroKernel.dll程序集文件,然后添加一个类请求消息类RequestMessage: 1: [Serializable] 2: [Message("14DB99D2-190C-48E9-879A-EA833247F24A", "请求消息")] 3: public class RequestMessage:IMessage 4: { 5: /// <summary> 6: /// 消息内容。 7: /// </summary> 8: public string Content 9: { 10: get; 11: set; 12: } 13:  14: public void Load(EAS.IO.BufferReader reader) 15: { 16: this.Content = reader.ReadString(); 17: } 18:  19: public void WriteTo(EAS.IO.BufferWriter writer) 20: { 21: writer.Write(this.Content); 22: } 23: }      以上代码我们定义了一个请求消息,消息ID为"14DB99D2-190C-48E9-879A-EA833247F24A",Load方法实现从消息读取器之中读出消息内容,WriteTo方法实现把消息内容写入消息编写器,转换为字节流供通信引擎进行收发,接下来我们再增加一个应答消息类ResponseMessage: 1: [Serializable] 2: [Message("D94C51C4-8423-4BF6-A011-184265BBA62C", "应答消息")] 3: public class ResponseMessage : RequestMessage, IMessage 4: { 5: }     在本例子之中应答消息与请求消息其内容没有本质的区别,都是文本通信,所以就直接继承了RequestMessage,变更了MessageID和消息说明。 到此为止,我们已经完成了请求消息与应答消息的定义Socket.Demo.Messages项目结构下:    接下来我们来实现服务端程序,向解决方案添加一个Socket.Demo.Server的Windows窗体应用程序:    同样,我们要引用AgileEAS.NET SOA 中间件的EAS.MicroKernel.dll程序集文件,并且还要引用Socket.Demo.Messages项目,然后重命名Form1为MainForm,并做以下界面布局:    接下来我们向服务端加载请求消息的处理器RequestMessageHandler,用于服务端收到请求消息之后的处理动作: 1: class RequestMessageHandler:AbstractMessageHandler<RequestMessage> 2: { 3: public override void Process(NetSession context, uint instanceId, RequestMessage message) 4: { 5: //1.显示消息。 6: MainForm.Instance.ShowMessage(message); 7:  8: //2.向客户端回复一条应当消息。 9: string content = string.Format("{0}已收到,OK!", message.Content); 10: ResponseMessage responseMessage = new ResponseMessage { Content = content }; 11: context.Reply(responseMessage); 12: } 13: }      然后我们实现MainForm窗体的功能代码: 1: using System; 2: using System.Collections.Generic; 3: using System.ComponentModel; 4: using System.Data; 5: using System.Drawing; 6: using System.Linq; 7: using System.Text; 8: using System.Windows.Forms; 9: using EAS.Sockets; 10: using Socket.Demo.Messages; 11:  12: namespace Socket.Demo.Server 13: { 14: public partial class MainForm : Form 15: { 16: public static MainForm Instance = null; 17: private SocketServer m_SocketServer = null; 18:  19: public MainForm() 20: { 21: InitializeComponent(); 22: Instance = this; 23:  24: //实例化对象。 25: this.m_SocketServer = new SocketServer(); 26:  27: //端口号为6610 28: this.m_SocketServer.Port = 6610; 29:  30: //注册消息处理器。 31: this.m_SocketServer.AddHander<RequestMessage>(new RequestMessageHandler()); 32:  33: this.m_SocketServer.ServerStarted += new EventHandler(m_SocketServer_ServerStarted); 34: this.m_SocketServer.ServerStopped+=new EventHandler(m_SocketServer_ServerStopped); 35: } 36:  37: void m_SocketServer_ServerStarted(object sender, EventArgs e) 38: { 39: this.btnStart.Enabled = false; 40: this.btnStop.Enabled = true; 41: } 42:  43: void m_SocketServer_ServerStopped(object sender, EventArgs e) 44: { 45: this.btnStart.Enabled = true; 46: this.btnStop.Enabled = false; 47: } 48:  49: internal void ShowMessage(Messages.RequestMessage message) 50: { 51: Action UI = () => 52: { 53: this.tbMessage.AppendText(message.Content); 54: this.tbMessage.AppendText("\r\n"); 55: this.tbMessage.ScrollToCaret(); 56: }; 57:  58: this.Invoke(UI); 59: } 60:  61: private void btnStart_Click(object sender, EventArgs e) 62: { 63: if (this.m_SocketServer.ServerState == ServerState.Stoped) 64: { 65: this.m_SocketServer.StartServer(); 66: } 67: } 68:  69: private void btnStop_Click(object sender, EventArgs e) 70: { 71: if (this.m_SocketServer.ServerState != ServerState.Stoped) 72: { 73: this.m_SocketServer.StopServer(); 74: } 75: } 76: } 77: }      其中代码this.m_SocketServer.AddHander<RequestMessage>(new RequestMessageHandler());完成向服务器注册请求消息的处理器对象,internal void ShowMessage(Messages.RequestMessage message)方法用于显示服务器收到的请求消息。     接下来我们来实现客户端程序,向解决方案添加一个Socket.Demo.Client的Windows窗体应用程序,同前面一样样,我们要引用AgileEAS.NET SOA 中间件的EAS.MicroKernel.dll程序集文件,并且还要引用Socket.Demo.Messages项目,然后重命名Form1为MainForm,并做以下界面布局:     接下来我们向客户端加载应答消息的处理器ResponseMessageHandler,用于客户端收到应答消息之后的处理动作: 1: using System; 2: using System.Collections.Generic; 3: using System.Linq; 4: using System.Text; 5: using EAS.Sockets.Messages; 6: using Socket.Demo.Messages; 7: using EAS.Sockets; 8:  9: namespace Socket.Demo.Client 10: { 11: class ResponseMessageHandler : AbstractMessageHandler<ResponseMessage> 12: { 13: public override void Process(NetSession context, uint instanceId, ResponseMessage message) 14: { 15: //1.显示消息。 16: MainForm.Instance.ShowMessage(message); 17: } 18: } 19: }          然后我们实现MainForm窗体的功能代码: 1: using System; 2: using System.Collections.Generic; 3: using System.ComponentModel; 4: using System.Data; 5: using System.Drawing; 6: using System.Linq; 7: using System.Text; 8: using System.Windows.Forms; 9: using EAS.Sockets; 10: using Socket.Demo.Messages; 11:  12: namespace Socket.Demo.Client 13: { 14: public partial class MainForm : Form 15: { 16: public static MainForm Instance = null; 17: SocketClient m_SocketClient; 18:  19: public MainForm() 20: { 21: InitializeComponent(); 22: Instance = this; 23: this.m_SocketClient = new SocketClient(); 24: this.m_SocketClient.IPAddress = "127.0.0.1"; 25: this.m_SocketClient.Port = 6610; 26: this.m_SocketClient.AddHander<ResponseMessage>(new ResponseMessageHandler()); 27:  28: this.m_SocketClient.Connected += new EventHandler(m_SocketClient_Connected); 29: this.m_SocketClient.Closed += new EventHandler(m_SocketClient_Closed); 30: } 31:  32: void m_SocketClient_Connected(object sender, EventArgs e) 33: { 34: this.btnConnect.Enabled = false; 35: this.btnClose.Enabled = true; 36: this.btnSend.Enabled = false; 37: } 38:  39: void m_SocketClient_Closed(object sender, EventArgs e) 40: { 41: this.btnConnect.Enabled = true; 42: this.btnClose.Enabled = false; 43: this.btnSend.Enabled = true; 44: } 45:  46: internal void ShowMessage(ResponseMessage message) 47: { 48: Action UI = () => 49: { 50: this.tbMessage.AppendText(message.Content); 51: this.tbMessage.AppendText("\r\n"); 52: this.tbMessage.ScrollToCaret(); 53: }; 54:  55: this.Invoke(UI); 56: } 57:  58: private void btnConnect_Click(object sender, EventArgs e) 59: { 60: if (this.m_SocketClient.ClientState == ClientState.Closed) 61: { 62: this.m_SocketClient.Connect(); 63: } 64: } 65:  66: private void btnClose_Click(object sender, EventArgs e) 67: { 68: if (this.m_SocketClient.ClientState != ClientState.Closed) 69: { 70: this.m_SocketClient.Connect(); 71: } 72: } 73:  74: private void btnSend_Click(object sender, EventArgs e) 75: { 76: if (this.tbSend.Text.Trim().Length == 0) 77: { 78: MessageBox.Show("不能发空消息"); 79: return; 80: } 81:  82: if (this.m_SocketClient.ClientState != ClientState.Closed) 83: { 84: RequestMessage rm = new RequestMessage(); 85: rm.Content = this.tbSend.Text.Trim(); 86: this.m_SocketClient.Send(rm); 87: } 88: } 89: } 90: }         OK,这个简单的例子我们已经开发完成了,接下来,我们来编译、测试一下这个例子! 四、运行测试      首先我们启动服务端程序、启动服务器,然后启动客户段并连接服务器,从客户段向服务器发送消息,服务端会显示客户端发送的消息会向客户端发送一个应答消息。 五、本例源代码下载      本文例子源代码请通过http://112.74.66.105/downloads/eas/examples/Socket.Demo.rar进行下载,有关于AgileEAS.NET SOA 中间件平台请通过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 | Socket | 中间件 | 企业应用架构 | 分布式 | 框架 | 消息中间件 | 通信框架 | C# | .NET | 请求 | 应答

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 | 消息中间件 | 通信框架

AgileEAS.NET SOA 中间件2013第四季度发布计划

by 魏琼东 2013.10.11 09:33
一、前言      AgileEAS.NET SOA 中间件平台是一款基于基于敏捷并行开发思想和Microsoft .Net构件(组件)开发技术而构建的一个快速开发应用平台。用于帮助中小型软件企业建立一条适合市场快速变化的开发团队,以达到节省开发成本、缩短开发时间,快速适应市场变化的目的。      AgileEAS.NET SOA中间件平台提供了敏捷快速开发软件工程的最佳实践,通过提供大量的基础支撑功能如IOC、ORM、SOA、分布式体系及敏捷并发开发方法所支撑的插件开发体系,以及提供了大量的实体、数据模型设计生成工具、代码生成工具,用于帮助中小软件开发商快速成长。      AgileEAS.NET平台充分把握目前软件行业快速发展的新趋势,基于敏捷并行开发、快速适应市场这样淳朴的软件工程实践,采用业界广泛使用的Microsoft .Net构件(组件)开发技术实践了这种开发思想,帮助软件企业实现“敏捷变化、快速适合”的目标,从而帮助软件企业在激烈的市场竞争中赢得先机并获得更高的回报。 二、AgileEAS.NET SOA 中间件平台5.1反馈      在2013年早些时候,我们向大家发布了AgileEAS.NET SOA 5.1版本,并且提供了一个基于”分布式SOA-SAAS-架构的药品商店”的案例供大家参考,目前有很多的客户和朋友基于AgileEAS.NET SOA平台开发了医疗、铁路、电力、农林、房地产、物联网、物流、教育、钢铁、企业信息化领域的产品,通过大家的反馈来看还是暴露出了如下的问题和不足:      1).大家一致反馈AgileEAS.NET SOA中间件平台是一个非常不错的基础平台,但是入门难度很高,初次拿到平台不知道如何下手,比如不知道如何建立和配置数据库、SOA服务端和客户配置。      2).案例较少,一直以来只有一个DrugShop案例。      3).对Web开发支持不够。      从以上三点总的来看,一切的根源是AgileEAS.NET  SOA 中间件是一个自成体系的一个不小的综合体,很多配置、使用缺乏有效的文档和指引,很多朋友都希望我们能给大家提供一些视频教程。 三、2013年第四季度发布计划       AgileEAS.NET SOA中间件平台一直以来入门门槛过高的根本原因是在我们AgileEAS.NET SOA开发团队自身,在我们的想法之中一直是努力给大家提供更好、更多的功能,但是易用性和如何降低入门门槛一直没有引起我们的重视,或许这与我们的团队的运作有一定的关系,因为AgileEAS.NET SOA中间件平台产品是免费的,并且我们也承诺一下会免费下去,所以我们团队的运作经费都来源于为软件企业所做的咨询服务上面,我们这些付费的服务客户因为都由我们进行指导开发,所以入门门槛过搞的原因也一直没有被引起重视。       AgileEAS.NET SOA 5.2版本,也就就即将准备发布的版本我们将来会作太多功能性的调整,但是会想办法在入门门槛上想办法降低,将会为大家提供更多的案例、进多的文档学习资料,也会考虑会平台之中的某些内容进行开源。 以下是AgileEAS.NET SOA 中间件平台5.2的发布计划:      1).AgileEAS.NET 5.2会把ActiveXForm运行容器一并发布,以某些客户满足使用Winform/WPF开发CS、BS兼容应用的能力。      2).在提供药品商店DrugShop应用案例的同时,还会向大家提供一个基于WinForm应用的小型EPR/进销存的案例/开源提供。      3).会向大家提供Web应用案例/开源提供。      4).会向大家介绍AgileEAS.NET SOA中间件的Socket通信框架。      5).会向大家提供一个基于AgileEAS.NET SOA中间件Socket通信框架的案例”聊天室案例”/开源提供。 除此之外,我们还会把AgileEAS.NET SOA中间件平台之中的以下几部分内容以开源形式向大家提供:     1).AgileEAS.NET SOA 中间件的Silverlight应用容器的源代码及插件功能、权限和等一系列的管理功能以源代码向大家提供,供大家开发参考。     2).AgileEAS.NET SOA 中间件集成的RDL报表系统、已经过我们汉化和Bug修改、广泛应用于医疗、铁路、电力等领域,将会以源代码形式向大家共享,以供更多有需要的朋友使用。 四、联系我们      为了完善、改进和推广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:

SOA | AgileEAS.NET | 分布式 | 企业应用架构 | 云计算 | NoSql | 中间件 | 框架

AgileEAS.NET SOA 中间件平台开发实例-SOA架构的药品商店系统-快速的SAAS开发体验

by 魏琼东 2013.10.11 08:58
一、AgileEAS.NET应用开发简介 在4月份,callhot写过一系列的有关于AgileEAS.NET平台的开发应用的系列AgileEAS.NET平台开发Step By Step系列-药店系统-索引,他通过一个接近于实际应用的案例,从头到尾的向大家展示了AgileEAS.NET平台在企业信息系统开发中的应用及其应用开发的过程。 AgileEAS.NET平台是一套应用系统快速开发平台,用于帮助中小软件开发商快速构建自己的企业信息管理类开发团队,以达到节省开发成本、缩短开发时间,快速适应市场变化的目的,AgileEAS.NET应用开发平台包含基础类库、资源管理平台、运行容器、开发辅助工具等四大部分,资源管理平台为敏捷并行开发提供了设计、实现、测试等开发过程的并行。 AgileEAS.NET平台基于软件过程改进以及构件化快速开发两方面达到这方面的目标,在软件过程改进实践方面,提出了独有的“敏捷并行开发方法”开发方法,其目的是在软件的管理之中提出符合国内中小软件企业实际情况并且可操作的软件工程实践、软件过程改进思想、及相配套的项目管理系统。 在快速开发方面,AgileEAS.NET平台平台提供了企业应用开发所需的诸如ORM、IOC、分布式通信、插件与平台基础结构以及一系统的快速生成工具,涵盖开发过程中的设计、编码、集成、部署、运维等各个环节。 在callhot的AgileEAS.NET平台开发Step By Step系列-药店系统的系统之中,他详细的向大家展示了AgileEAS.NET平台在企业信息系统中提供的强大支持,在短短的一个月时间之向,向大家贡献了一个完整的案例及配套的几十篇渐进式教程,我相信大家通过他的教程,都能应用AgileEAS.NET平台中小型企业应用。 二、药店系统的SAAS部署 Callhot接手了新的工作,我在他留下的代码的基础之上,采用了最新的AgileEAS.NET平台进行了一个重构和裁剪,并且通过互联网以SAAS结构向大家发布了这个应用,其总体结构如下。 数据库和分布式应用层我部署在我的互联网服务器上,客户端我将提供一个msi包给大家下载,客户端和应用服务器可以通过webservice、WCF(http/TCP)进行数据通信,最终运行界面如下: 三、客户端下载及使用说明 客户软编译版本我打开了rar压缩包,请大家通过这里下载,下载解压缩后运行EAS.WinClient.exe文件。 大家可以使用0001(采购员),0002(销售员),0003(店长)三个账号登录药店系统,所有密码均为空,三个账户操作权限不同,请大家不要修改密码。 在下载包中的EAS.Winclient.exe.config文件之中记录应用程序服务器的通信设置。 <services> <service name="RMIService" service-type="WebService" singleton="true" url="http://www.agilelab.cn/xservice/rmiservice.asmx" /> <!--<service name="RMIService" service-type="WcfService" singleton="true" url="net.tcp://202.100.84.179:6688/EAS.RMIService" />--> </services> 系统默认使用WebService通信,连接至http://www.agilelab.cn/xservice/rmiservice.asmx,我在http://www.agileleab.cn/网站以iis宿住部署了webservice方式部署了通信服务,业务层寄宿在iis之中运行。 使用者也可以替换为wcf/tcp通信,连接至net.tcp://202.100.84.179:6688/EAS.RMIService,我在202.100.84.179部署了一套独立的基于wcf/tcp通信的应用服务程序。 友情提示一下,webservice通信较慢,特别是在登录界面之上,点了登录可能要等一会,因为使用的是SericeLocator动态调用技术,涉及编译webservice的代理类,请大家理解。 四、关于自动升级 在AgileEAS.NET平台本次重构过程之中,废弃了原有的基于插件的静默升级形式,替换了比较通过的独立升级程序,升级参数通过客户端目录中的update.ini文件升级。# AgileEAS.Net 平台升级控制文件 [config] allow = 1url = http://www.agilelab.cn/xservice/smartupdateservice.asmx#url = net.tcp://202.100.84.179:6688/EAS.SmartUpdateService  升级技术同样也可以采用ws技术也可采用wcf技术,目前,为了避免多点升级维护的麻烦,只提供于ws的升级,升级服务地址http://www.agilelab.cn/xservice/smartupdateservice.asmx。 五、案例源代码 本案例源代码结构重构之后更加合理,代码结构如下: DrugShop.DAL为系统的数据访问层(充血模型),DrugShop.BLL为系统的业务层/服务层,DrugShop.WinUI为系统以WinForm为表现模式的UI层,DrugShop.Res为系统的可替换资源,包括自定义的登录、关于窗口、banner条和起始页模块,DrugShop.AssStart为开发过程中的平台插件容器调试环境的启动程序。 药店系统-案例的源代码、文档、数据库备份、最后发布都打进一个独立的Rar包中,其结构如下: 请大家从这里下载。 六、平台其他下载      有关于平台最新版本的最新发布版本的程序集、类库手册、相关资料,请大家从AgileEAS.NET平台的官网http://www.smarteas.net/进行下载,官网设有独立的下载页面,从这里下载:官网下载。 CallHot 写过一个系列的基于AgileEAS.NET平台的开发案例,请大家通过AgileEAS.NET平台开发Step By Step系列-药店系统-索引及AgileEAS.NET敏捷开发平台及案例下载(持续更新)-索引、AgileEAS.NET平台开发实例-药店系统-视频教程系列-索引一系列文章进行下载。 七、如何联系      我们为完善、改进和推广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。 链接 AgileEAS.NET平台开发指南-文章索引 AgileEAS.NET应用开发平台介绍-文章索引 AgileEAS.NET平台应用开发教程-案例计划 AgileEAS.NET平台开发Step By Step系列-药店系统-索引

Tags:

SOA | 分布式 | 云计算 | AgileEAS.NET | SAAS

AgileEAS.NET SOA 平台最新下载

by 魏琼东 2013.4.16 16:37
一、前言      AgileEAS.NET SOA中间件平台,简称EAS.NET,是基于敏捷并行开发思想和Microsoft .Net构件(组件)开发技术而构建的一个快速开发应用平台。用于帮助中小型软件企业建立一条适合市场快速变化的开发团队,以达到节省开发成本、缩短开发时间,快速适应市场变化的目的。      AgileEAS.NET SOA中间件平台包含基础类库、资源管理平台、运行容器、开发辅助工具等四大部分,资源管理平台为敏捷并行开发提供了设计、实现、测试等开发过程的并行,基于AgileEAS.NET平台的应用系统的各个业务功能子系统,在系统体系结构设计的过程中被设计成各个原子功能模块,各个子功能模块按照业务功能组织成单独的程序集文件,各子系统开发完成后,由AgileEAS.NET资源管理平台进行统一的集成部署。      AgileEAS.NET SOA中间件平台也是为应用开发而提供的一组低层功能集合及开发支撑平台,应用系统的开发建立在此平台之上,采用构件式、可复用开发,节省开发成本,加快开发速度,在软件开发上更好的作到多快省。      AgileEAS.NET SOA中间件平台的核心思想是包含两点,一是基于Microsoft .Net构件技术的插件式开发,二是基于敏捷并行开发方法以的构件并行,即应用系统的构件(模块)同步并行开发,由平台进行总装集成。      AgileEAS.NET SOA中间件平台充分把握目前软件行业快速发展的新趋势,基于敏捷并行开发、快速适应市场这样淳朴的软件工程实践,采用业界广泛使用的Microsoft .Net构件(组件)开发技术实践了这种开发思想,帮助软件企业实现“敏捷变化、快速适合”的目标,从而帮助软件企业在激烈的市场竞争中赢得先机并获得更高的回报。 二、AgileEAS.NET SOA平台相关下载 2.1、AgileEAS.NET SOA 5.1最新版本下载       包含AgileEAS.NET SOA 平台的最新程序集,SQLServer\Oracle\MySQL\SQLite数据库的初始化工上,平台最新文档。       直接下载:AgileEAS.NET SOA 5.2 下载,http://112.74.66.105/downloads/eas/agileeas.net.5.0.rar。       SVN更新:https://112.74.66.105/svn/eas/5.0,登录用户:eas,密码eas.       AgileEAS.NET SOA 中间件平台管理员:Administrator,登录密码sa。 2.2、案例源代码-药店管理系统         基于AgileEAS.NET平台开发的一个药店管理系统,包含所有源代码、文档、数据库,可直接运行,有关这个案例的文章请参考AgileEAS.NET平台开发Step By Step系列-药店系统-索引。       直接下载:AgileEAS.NET SOA 5.0 案例(药店管理系统)源码下载,http://112.74.66.105/downloads/eas/drugshop.rar。       SVN更新:https://112.74.66.105/svn/drugshop,登录用户:eas,密码eas.       源代码下载,请通过进行下载。       管理员:Administrator,登录密码sa。 2.3、案例源代码-小型分销EPR系统         基于AgileEAS.NET平台开发的一个小型分销ERP系统,包含所有源代码、文档、数据库,可直接运行,有关这个案例的文章请参考AgileEAS.NET平台开发Step By Step系列-药店系统-索引。       直接下载:AgileEAS.NET SOA 5.0 案例(分诊ERP系统)源码下载,http://112.74.66.105/downloads/eas/smarterp.rar。       SVN更新:https://112.74.66.105/svn/smarterp,登录用户:eas,密码eas.       源代码下载,请通过进行下载。       管理员:Administrator,登录密码sa。       ERP操作员:erp-admin,登录密码为空。 2.4、案例源代码-在线聊天室系统         基于AgileEAS.NET SOA 中间件平台Socket通信框架的一个多人在线聊天室系统,包括所有的源代码、文档、数据库,可直接运行,有关于本案例请参考AgileEAS.NET SOA 中间件平台.Net Socket通信框架-完整应用例子-在线聊天室系统-下载配置、AgileEAS.NET SOA 中间件平台.Net Socket通信框架-完整应用例子-在线聊天室系统-代码解析。       直接下载:AgileEAS.NET SOA 中间件平台Socket通信框架 案例(在线聊天室系统)源码下载,http://112.74.66.105/downloads/eas/Chat.src.rar。       SVN更新:https://112.74.66.105/svn/chat,登录用户:eas,密码eas.       源代码下载,请通过进行下载。       同时,我们在服务器上部署好了一套可运行的案例,客户端下载:http://112.74.66.105/downloads/eas/examples/chat.client.rar。 2.5、Grid++报表       最新版本的AgileEAS.NET SOA 平台中集成了Grid++报表,如需要使用Grid++报表进行开发,请先下载Grid++报表,下载地址:http://www.rubylong.cn/Download/Grid++Report5.zip。 2.6、视频会议培训下载       包含历次的视频会议培训过程所录制的学习视频,请大家及时下载。       第一辑-AgileEAS.NET平台介绍及药品系统的SAAS搭建演练:下载地址:http://112.74.66.105/downloads/video/AgileEAS.NET 4.0 Video1.rar       第二辑-简单插件开发应用演练:下载地址:http://112.74.66.105/downloads/video/AgileEAS.NET 4.0 Video2.rar       第三辑 插件的安装、配置以及账户权限系统演练.wmv http://112.74.66.105/downloads/video/AgileEAS.NET 4.0 Video3.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人 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。

实例演示如何使用AgileEAS.NET SOA平台工作流进行业务流程自定义

by 魏琼东 2012.2.28 18:51
  在说这个案例之前先向大家转发一个简单的招聘信息,我们团队目前需要招聘两名技术助理人员,跟随我们做一些产品开发和技术咨询工作,欢迎有志同道合的朋友与我们合作:http://job.cnblogs.com/offer/19632/。 一、案例业务流程说明 在前一篇文章AgileEAS.NET SOA 中间件平台工作流系统介绍之中我简单的向大家介绍了AgileEAS.NET SOA平台工作流系统的基本介绍,本文我将向大家以一个真实的案例向大家介绍AgileEAS.NET SOA平台工作流系统的应用。 今天我们的例子来自于医疗信息化之中的一个简单案例,关于医院药库/药房药品报损业务的处理过程,现实业务流程如以定义: 目前的业务流程是这么要求的,由药房管理人员发起一个报损申请,然后由药房负责人审批,早批不通过则由药房管理人员修改后再次提交,通过则由药剂科长审核,审核通过之后由药房管理人员确认报损,否则终止本次报损业务处理。 对于不同地域、不同规模、不同经营性质的医院来说,对于药品的报损处理流程都可能不一样,那么摆在医疗开发商面前的一个很麻烦问题就是业务流程的定制处理,对于此类问题使用传统方法一直是一个非常棘手的问题,可能不同医院的业务流程的变动必须会导致程序代码的变动,进行造成医疗软件开发商产品版本管理混乱、产品实施周期过长进而导致开发商的间接管理成本和项目总体成本急剧提高。 二、应用AgileEAS.NET SOA平台工作流重组流程 对于上述问题,我们可以使用AgileEAS.NET SOA平台所提供的工作流系统进行业务流程自定义,使用工作流平台驱动业务数据达到业务流程再造的目的。 我们来仔细看上述业务流程就会发现,这是一个及其经典的“申请-早批-确认”业务处理流程,对于“申请”和“确认”都是一个比较固定的操作,但是对于“申请-早批-确认”的处理过程,则是一个极不确定的过程,比如一个小型医疗机构可以就需要一个简单的审批即可,但是对于一个大型的医疗机构,其审批可以不止二级审批,可能会有三级或多级审批处理。 如果我们开发两个功能模块“药房报损申请/申批”、“药房报损确认”以及定义一个工作流“药房报损申批流程”,并让“药房报损申批流程”与“药房报损申请/申批”相结合,由工作流驱动“药房报损申请/申批”按照“药房报损申批流程”进行处理,并在处理完成之由“药房报损确认”完成药品报损,那么我们是否就可以实现这种高度灵活的流程自定义呢,回答当然是OK,那么接下来我们来看看怎么办到这样的效果吧。 三、如果做?一步一步来 我们来先开始模块“药房报损申请/申批”,其最终效果如下: 接下来模块“药房报损确”,其最终效果如下: 接下来我们来定义工作流“药房报损申批流程”: 流程权限设定: 流程权限设定中包含流程发起权限及各状态的处理权限,其设置方式都一样,同AgileEAS.NET SOA平台中的模块权限设置保持一致,我们在些为账号xyf设定流程发起权限和“审请状态”的处理权限,给帐号zhx设定“审请状态”的处理权限,给账号Administrator设置“审请状态”的处理权限。 接下来需要绑定工作流与其驱动的业务模块之间的关联关系: 同时也需要在模块代码之中完成与工作流的绑定: 在功能模块中需要做两个地方的绑定,第一个在模块的头部需要标记明确WorkflowAddIn属性,用于声明这是一个受工作流驱动的功能模块,另一个是需要在功能模块中的声音一个类型为Guid的属性,并且标记WorkflowInstanceId属性,用于工作流向功能模块写入当前工作流实例,至此为止,工作流定义及流程自定义工作完成,接下来我们看看运行效果吧。 四、如果做?一步一步来 首先,我们使用帐号xyf登录,我们会看到如下功能: 我们打开“发起流程”: 或者直接打开“药房报损申请”模块发起工作流: 提交完成之后打开“我的申请”会看到刚才我们所发起的实例: 接下来,我们切换到账号“zhx”登录,并且打开我的待办: 完成一级审批“药房报损申请”: 打开已办事宜: 接下来,我们切换到账号“888888”登录,并且打开我的待办: 完成二级审核“药房报损申请”: 打开已办事宜: 最后我们切换到账号“xyf”,并打开 “药房报损确认”模块: 至此,药房药品报损业务处理演示完成,若审批流程发生变更,则只需要项目实施人员根据客户的业务流程修改工作流定义,而不需要修改程序代码,实现流程的自定义。 五、AgileEAS.NET 4.0 下载 有关于平台最新版本的最新发布版本的程序集、类库手册、相关资料,请大家从AgileEAS.NET平台的官网http://www.smarteas.net/进行下载,官网设有独立的下载页面,从这里下载:官网下载页面。 六、如何联系我们 如果您在使用AgileEAS.NET开发平台中有什么问题,请使用如下几种联系方式或者沟通方式。 1、官方网站: AgileEAS.NET平台:http://www.smarteas.net/ 敏捷软件工程实验室:http://www.agilelab.cn/

给大家分享一个培训的PPT:面向构件的组织级开发模式探讨

by 魏琼东 2011.11.5 14:17
构件化软件开发模式快速响应客户需要的一个非常重要的方式,通过构件对功能的隔离,从而把需要的变更对系统整合的影响降低到最底限度,通过构件的不同版本管理不同客户对同一需要的不同个性化差异,进行降低系统的快速市场适应能力,通过实施企业级构件的开发实践达到提高软件企业有效生产效率的目的,进市提高企业的综合实力。

[更多...]

Tags: , , , , , , , , , , , , ,

SOA | 分布式 | 企业应用架构 | 云计算

如何使用AgileEAS.NET快速开发平台构建大型分布式应用-山东省寿光市区域公共卫生平台

by 魏琼东 2011.7.2 20:15
一、AgileEAS.NET平台简介 AgileEAS.NET平台是一套应用系统快速开发平台,用于帮助中小软件开发商快速构建自己的企业信息管理类开发团队,以达到节省开发成本、缩短开发时间,快速适应市场变化的目的,AgileEAS.NET应用开发平台包含基础类库、资源管理平台、运行容器、开发辅助工具等四大部分,资源管理平台为敏捷并行开发提供了设计、实现、测试等开发过程的并行。 AgileEAS.NET平台基于软件过程改进以及构件化快速开发两方面达到这方面的目标,在软件过程改进实践方面,提出了独有的“敏捷并行开发方法”开发方法,其目的是在软件的管理之中提出符合国内中小软件企业实际情况并且可操作的软件工程实践、软件过程改进思想、及相配套的项目管理系统。     在快速开发方面,AgileEAS.NET平台平台提供了企业应用开发所需的诸如ORM、IOC、分布式通信、插件与平台基础结构以及一系统的快速生成工具,涵盖开发过程中的设计、编码、集成、部署、运维等各个环节。   二、寿光市区域公共卫生平台 寿光区域公共卫生平台全称为“寿光市区域卫生一体化信息平台”,是由寿光市卫生局负责建议的寿光医疗信息化重大工程,项目由山东中印环球软件公司承担研发,其旨在解决城乡居民的看病贵、看病难的问题,合理统筹医疗资料,建立基于居民健康档案为区域公共卫生平台,整合城乡居民健康档案管理、新农村合作医疗信息系统、医院管理信息系统、社区公共卫生服务系统、医疗卫生行政办公系统等。 参考相关新闻:寿光市区域卫生一体化信息平台投入试运行,中印环球软件公司助力寿光医疗卫生改革信息。 三、如何基于AgileEAS.NET平台构建 寿光区域公共卫生平台由山东中印环球软件公司承担研发,山东中印环球软件公司公司是一家中印合资的软件企业,其主要涉及政府、公安、消防、电子政务与办公自动化、企业ERP等相关的行业与应用研发、实施业务,对于医疗卫生行业有一定的陌生,其后与国内提供医疗信息化的很多企业各组织考虑合作,经过多方考察,最后确定与我所带领的敏捷软件工程实验室合作,合作思路和解决方案如下: 由我们提供AgileEAS.NET 敏捷软件开发平台以及配套的开发技术咨询服务、同时也向他们提供医疗行业信息化方面的行业咨询,由山东中印环球软件公司开发公共平台的相关软件的一部分(健康档案平台及新型农村合作医疗平台)、由我们提供一套基于AgileEAS.NET平台的医院信息系统、电子病历系统,最后由山东中印环球软件公司进行整合和实施。 下面是寿光区域公共卫生平台的网络结构图:   下面是寿光区域公共卫生平台的应用组成结构:   从上面两个图我们可以看出寿光区域公共卫生平台是一个非常复杂的、涉及多个业务系统、多个机构的行业应用系统,其中包含关键的三个系统:健康档案管理系统、新型农村合作医疗、医院信息系统/社区公共卫生服务系统,以及这三个系统之间无缝集成将会是一个很麻烦的问题。 四、项目研发过程及进展、现状 我们山东中印环球软件公司的合作始于2010年12月底,在此之前,山东中印环球软件公司已经组织了一个需求调研小组也做了一部分需要调研工作,合作开始之后我们一边对开发人员进行技术培训(半个月),即基于AgileEAS.NET平台的企业应用开发技术演练,另一方面与整个开小组进行业务分析与架构设计。 得益于AgileEAS.NET平台良好的架构及其提供的大量开发辅助工作以及依赖于山东中印环球软件公司为项目配置了优秀而尽职的开发人员,在正式开发一个半月之后,就拿出了公卫平台中的第一部分:城先居民健康档案管理系统,并于4月初正式上线运行,项目开始2个月之后,完成了公卫平台平台的第二部分:新型农村合作医疗系统,之后我们向开发小组移交了医院信息系统系统电子病历系统,开始了健康档案、新型农村合作医疗、医院信息系统三大系统之间的整合。 可以说,整个寿光公共卫生平台在差不多半年时间之内,从无到有就诞生了,项目截至目前,公共卫生平台的三大系统:健康档案、新家合、医院信息系统都已经上线运行,整合和实施正在进行中,下面给大家给几个应用截图: 健康档案管理系统:   新型农村合作医疗系统:   医院管理信息系统:   五、寿光区卫的感想 寿光区域公共卫生平台这个项目可以说是非常成功的,对于本次合作的多方也都是非常的满意,本项目中应用了AgileEAS.NET平台所提供的诸多思想、技术与工具,也更加印证了AgileEAS.NET是非常可靠的用于构建企业级应用的快速开发中间件,通过本项目,也使山东中印环球软件公司在构建大型分布式企业应用的经验有长足的提高。 六、平台相关下载      有关于平台最新版本的最新发布版本的程序集、类库手册、相关资料,请大家从AgileEAS.NET平台的官网http://www.smarteas.net/进行下载,官网设有独立的下载页面,从这里下载:官网下载。 CallHot 写过一个系列的基于AgileEAS.NET平台的开发案例,请大家通过AgileEAS.NET平台开发Step By Step系列-药店系统-索引及AgileEAS.NET敏捷开发平台及案例下载(持续更新)-索引、AgileEAS.NET平台开发实例-药店系统-视频教程系列-索引一系列文章进行下载。 七、如何联系      如果您在使用AgileEAS.NET开发平台中有什么问题,请使用如下几种联系方式或者沟通方式。 1、官方网站:      AgileEAS.NET平台:http://www.smarteas.net/      敏捷软件工程实验室:http://www.agilelab.cn/ 2、AgileEAS.NET平台交流群: AgileEAS.NET平台交流群:120661978(超级群)[新建]      AgileEAS.NET平台交流群:125643764(高级群)[新建]      AgileEAS.NET平台交流群:147168308(高级群)[新建]     3、系统架构交流群: 系统架构交流群:9105332(高级群)(已满)      系统架构交流群1:124825459(高级群)(已满)      系统架构交流群2:49124441(高级群)(已满)      系统架构交流群3:47025564(高级群)(已满) 链接 AgileEAS.NET平台开发指南-文章索引 AgileEAS.NET应用开发平台介绍-文章索引 AgileEAS.NET平台应用开发教程-案例计划 AgileEAS.NET平台开发Step By Step系列-药店系统-索引

最新评论

声明

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

© Copyright 2011