一种批量发布服务的实现方法技术

技术编号:19240193 阅读:15 留言:0更新日期:2018-10-24 03:49
本发明专利技术公开了一种批量发布实现方法,包括服务进程和子服务;服务进程启动后,只需要将需要发布或更新的子服务压缩包放入服务进程指定文件夹中,服务进程自动解压识别,完成发布或更新。子服务在应用程序中的运行是独立安全的,一个子服务出现问题并不会影响到其他子服务,而且子服务更新时,只需要停止该服务,其他服务正常运行。

【技术实现步骤摘要】
一种批量发布服务的实现方法
本专利技术属于计算机
,特别涉及一种快速发布或更新服务的实现方法。
技术介绍
随着计算机软件技术的不断发展,尤其微服务的概念被提出后,服务器上需要发布的服务数量越来越多,对于发布和更新服务的要求也越来越高。目前发布服务的主要方式有IIS寄宿和应用程序寄宿(包含windows服务)。1.IIS寄宿:一次只能发布一个服务,配置起来麻烦,更新时需要分别找到对应的文件覆盖。服务越多,发布和更新的难度就越大。2.应用程序寄宿:每一个服务都要启动一个应用程序,服务多了也难以管理。无论使用现有的哪种方式,服务数量变多都会面临管理维护难度增大、维护成本上升的问题。
技术实现思路
本专利技术的目的在于克服现有技术的缺点与不足,提供一种批量发布服务的实现方法,以C#技术实现WCF服务的快速发布或更新方案,使得个别服务的更新不会影响其他服务的正常运行;服务进程启动后,只需要将需要发布或更新的子服务压缩包放入指定文件夹中,服务进程自动解压识别,完成指定操作。本专利技术的目的通过以下的技术方案实现:一种批量发布服务的实现方法,方法实现的应用程序进程包含了服务进程和子服务,服务进程和子服务各自属于不同的应用程序域,服务进程通过跨域通信来管理子服务;服务进程包括应用程序域管理模块,跨域通信模块,文件夹监听模块,文件校验模块和文件操作模块;应用程序域管理模块:实现子服务的应用程序域的创建和卸载;跨域通信模块:实现服务进程与子服务之间的通信,用于启动和停止子服务;文件夹监听模块:实现固定文件夹的实时监听,过滤文件类型;文件校验模块:实现子服务文件的校验,包括错误校验,操作校验;文件操作模块:实现文件夹解压,移动和读取;子服务实现与服务进程协定的交互接口:启动和停止服务的接口;子服务还需编译Dll类库文件用于被服务进程动态加载。优选的,子服务的文件需要压缩后才能被服务进程识别,压缩文件中需包含可被校验识别的配置文件,用以标识子服务的唯一信息。优选的,批量发布服务过程包括启动时和启动后2个部分;启动时:读取配置文件,检查是否有需要启动的子服务,如果有就启动子服务;根据配置文件对指定文件夹监听;启动后,当指定文件夹中有压缩文件时,自动解压压缩文件,并校验解压出来的文件;如果校验成功,根据获取的服务信息进行发布或更新操作;校验不成功则删除所有文件。优选的,发布子服务时,首先,需要在本地目录创建服务的文件夹,并拷贝子服务文件;然后,根据服务信息创建应用程序域;最后,启动子服务。优选的,更新子服务时,首先,需要停止运行中的子服务,卸载应用程序域;然后,将需要更新的子服务文件覆盖到原来的文件夹中;最后,启动子服务。优选的,整个方法实现的过程包括:S1、加载固定目录下的文件夹,读取路径,名称和服务地址配置;S2、创建应用程序域;创建应用程序域的代理对象;S3、代理对象加载服务程序集,导出接口对象并封装接口调用方法;S4、实现文件夹监听功能,实时解压压缩文件;S5、处理解压出来的文件夹。具体的,对于步骤S1,在Services文件夹下有多个文件夹,文件夹的名称为Servicename,文件夹下为各个服务的DLL文件;程序启动时获取Services目录下所有的文件夹路径和文件夹名称,并根据每个文件夹的名称读取地址的配置文件。具体的,对于步骤S2,遍历获取的结果创建服务的应用程序域,使用CreateDomain(name)新建一个应用程序域AppDomain,并赋予名称“ServiceName",此时新创建的AppDomain的Loader堆是空的,此时线程还处于默认的AppDomain中;接着调用AppDomain的实例方法CreateInstanceAndUnwarp在创建的AppDomain中加载程序集并实例了一个ServiceProxy类型的对象,执行CreateInstanceAndUnwarp时线程会跨越应用程序域来到newappdomain域中,创建好对象后把对象传递到默认AppDomain中,这里一个应用程序域的对象不能被另一个应用程序域的变量所引用,当CreateInstanceAndUnwarp要将一个AppDomain中的对象传递到另一个AppDomain时发现对象的类型是继承自MarshalByRefObject类型时就会知道此对象要按引用封送,CLR会在目标AppDomain中创建代理类型并实例化,代理类型所公开的成员跟源AppDomain中要传递的对象的类型是一样的,通过这个代理类型的对象就可以与各个独立的程序域进行通信,控制程序域内的服务启动或停止。具体的,对于步骤S3,定义一个统一的接口ServiceInterface,接口只有2个方法,Start方法和Stop方法;接着,编写寄宿servicehost运行的服务,实现一个ServiceProject类,该类继承ServiceInterface,并实现接口方法start和stop,ServiceProject类使用托管可扩展框架,将类声明导出为ServiceInterface接口类型,服务编译为DLL类库;接着,实现服务代理ServiceProxy类,该类用于加载服务DLL,获取服务发布地址配置;动态加载DLL使用AggregateCatalog的目录类,这是一个聚合目录,它可以将多个目录组织在一起,这样,MEF就会在当前目录去搜寻匹配的导出部件;在创建代理对象时设置服务的地址、服务DLL的路径,每一个服务都有一个独立的文件夹,文件夹名称为服务名;通过路径加载所有的DLL,并通过MEF导入ServiceInterface的类型对象,封装Start方法调用ServiceInterface的接口方法启动服务;封装stop方法调用ServiceInterface的接口方法停止服务;在主程序域只需控制接引对象ServiceProxy就可以完成服务的启动停止。具体的,对于步骤S4,实现文件夹监听功能,以压缩包的方式传输文件,以文件夹方式加载程序集;文件夹监听功能就是将目标文件夹中的压缩文件加压到固定文件夹,名称为压缩包名称,使用FileSystemWatcher对象实现。具体的,对于步骤S5,每当有Services目录下新的文件文件夹生成时,读取文件夹的配置,调用程序域创建方法创建新的域并启动相应的服务。本专利技术与现有技术相比,具有如下优点和有益效果:1、部署服务简单,启动服务进程后,只需要复制子服务包在指定的目录下,就能自动发布服务。2、服务更新容易,无需查找服务,只要将新的子服务包放到指定的目录下即可自动完成服务更新,节省人力成本。3、子服务运行隔离,任何一个服务的停止,不需要停止服务进程,也不会对其他服务产生影响。附图说明图1是实施例方法应用程序进程结构图。图2是实施例方法的功能流程图。具体实施方式下面结合实施例及附图对本专利技术作进一步详细的描述,但本专利技术的实施方式不限于此。实施例1一种批量发布服务的实现方法,本方法并不涉及对单个服务的管理(如启动,停止)。而且对于子服务程序有一定的要求,必须继承实现指定的接口。如图1所示,在本实现方案的结构图中可以看到,整个方案的实现有一个应用程序进程,应用程序进程包含了服务进程和子服务,都各自在不同应用程序域里,服本文档来自技高网...

【技术保护点】
1.一种批量发布服务的实现方法,其特征在于,方法实现的应用程序进程包含了服务进程和子服务,服务进程和子服务各自属于不同的应用程序域,服务进程通过跨域通信来管理子服务;服务进程包括应用程序域管理模块,跨域通信模块,文件夹监听模块,文件校验模块和文件操作模块;应用程序域管理模块:实现子服务的应用程序域的创建和卸载;跨域通信模块:实现服务进程与子服务之间的通信,用于启动和停止子服务;文件夹监听模块:实现固定文件夹的实时监听,过滤文件类型;文件校验模块:实现子服务文件的校验,包括错误校验,操作校验;文件操作模块:实现文件夹解压,移动和读取;子服务实现与服务进程协定的交互接口:启动和停止服务的接口;子服务还需编译Dll类库文件用于被服务进程动态加载。

【技术特征摘要】
1.一种批量发布服务的实现方法,其特征在于,方法实现的应用程序进程包含了服务进程和子服务,服务进程和子服务各自属于不同的应用程序域,服务进程通过跨域通信来管理子服务;服务进程包括应用程序域管理模块,跨域通信模块,文件夹监听模块,文件校验模块和文件操作模块;应用程序域管理模块:实现子服务的应用程序域的创建和卸载;跨域通信模块:实现服务进程与子服务之间的通信,用于启动和停止子服务;文件夹监听模块:实现固定文件夹的实时监听,过滤文件类型;文件校验模块:实现子服务文件的校验,包括错误校验,操作校验;文件操作模块:实现文件夹解压,移动和读取;子服务实现与服务进程协定的交互接口:启动和停止服务的接口;子服务还需编译Dll类库文件用于被服务进程动态加载。2.根据权利要求1所述的批量发布服务的实现方法,其特征在于,子服务的文件需要压缩后才能被服务进程识别,压缩文件中需包含可被校验识别的配置文件,用以标识子服务的唯一信息。3.根据权利要求1所述的批量发布服务的实现方法,其特征在于,批量发布服务过程包括启动时和启动后2个部分;启动时:读取配置文件,检查是否有需要启动的子服务,如果有就启动子服务;根据配置文件对指定文件夹监听;启动后,当指定文件夹中有压缩文件时,自动解压压缩文件,并校验解压出来的文件;如果校验成功,根据获取的服务信息进行发布或更新操作;校验不成功则删除所有文件。4.根据权利要求1所述的批量发布服务的实现方法,其特征在于,发布子服务时,首先,需要在本地目录创建服务的文件夹,并拷贝子服务文件;然后,根据服务信息创建应用程序域;最后,启动子服务;更新子服务时,首先,需要停止运行中的子服务,卸载应用程序域;然后,将需要更新的子服务文件覆盖到原来的文件夹中;最后,启动子服务。5.根据权利要求1所述的批量发布服务的实现方法,其特征在于,整个方法实现的过程包括:S1、加载固定目录下的文件夹,读取路径,名称和服务地址配置;S2、创建应用程序域;创建应用程序域的代理对象;S3、代理对象加载服务程序集,导出接口对象并封装接口调用方法;S4、实现文件夹监听功能,实时解压压缩文件;S5、处理解压出来的文件夹。6.根据权利要求5所述的批量发布服务的实现方法,其特征在于,对于步骤S1,在Services文件夹下有多个文件夹,文件夹的名称为Servicename,文件夹下为各个服务的DLL文件;程序启动时获取Services目录下所有的文件夹路径和文件夹名称,并根据每个文件夹的名称读取地址的配置文件。7.根据权利要求5所述的批量发布服务的实现方法,其特征在于,对于步骤S2,遍历获取的结果创建服务的应用程序域,使用CreateDomain(name)新建一个应用程序域AppDomain,并赋予名称“ServiceName",此时新创建的AppDomain的Loader堆是空的,此时线程还处于默认的A...

【专利技术属性】
技术研发人员:曾令清
申请(专利权)人:广州慧睿思通信息科技有限公司
类型:发明
国别省市:广东,44

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1