CN105718322A - 同一进程下多应用模块客户端的异常处理方法 - Google Patents
同一进程下多应用模块客户端的异常处理方法 Download PDFInfo
- Publication number
- CN105718322A CN105718322A CN201410709214.6A CN201410709214A CN105718322A CN 105718322 A CN105718322 A CN 105718322A CN 201410709214 A CN201410709214 A CN 201410709214A CN 105718322 A CN105718322 A CN 105718322A
- Authority
- CN
- China
- Prior art keywords
- functional unit
- application domain
- application
- domain
- same process
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Landscapes
- Stored Programmes (AREA)
Abstract
本发明涉及一种同一进程下多应用模块客户端的异常处理方法。包括以下步骤:创建功能单元;***S在其寄宿进程P中为各个功能单元Mi创建应用程序域;将各个功能单元寄宿到应用程序域中;***集成各应用程序域及功能单元;***及各个功能单元寄宿在单一进程中;当不同的功能单元之间存在业务关联时,采用跨应用程序域的数据传递方法进行不同的功能单元之间的数据传递;当功能单元发生异常时,***将该功能单元卸载。本发明能够有效控制***异常问题影响范围,安全隔离各个功能模块,保障***安全,提高***稳定性。
Description
技术领域
本发明涉及信息技术领域,特别涉及一种同一进程下多应用模块客户端的异常处理方法。
背景技术
根据不同企业实际业务的需求,生产过程管理信息***一般可划分为多个不同的功能模块,在***开发过程中,往往将整个***划分为不同子功能模块由不同开发人员分别开发,最后根据实际需求动态将各个子功能模块加载到***中去。
上诉开发方式虽然灵活,但是***存在较大的安全隐患,当某一子模块的开发人员没有将其内部异常问题处理完全就集成到***,子模块抛出异常时,异常问题会传导到整个***,导致整个***无法正常运行。不同的子模块运行在同一个进程中,相互间可以访问对方的数据,容易造成对数据的误操作,抛出业务逻辑异常,而生产过程管理信息***对***稳定性及业务逻辑的正确性要求较高,***的停滞会为现场生产造成较大困扰。
因此要保证整个***安全稳定的运行,就需要在整合各个功能模块的同时,在***级别加入异常处理机制,来隔离各个子功能模块的异常问题,使异常问题传导的级别降低到子模块内部,这样便可以较大程度的提高整个***的稳定性,同时对各子模块的数据进行隔离,避免因不同模块间对数据的误操作而抛出业务逻辑异常。
发明内容
针对现有技术中存在的上述不足之处,本发明提出了一种同一进程下多应用模块制造执行***的客户端异常处理方法,在***级别控制不同功能模块抛出的异常问题,本发明采用的技术方案是:一种同一进程下多应用模块客户端的异常处理方法,包括以下步骤:
创建功能单元Mi:以***中相互独立的子模块作为功能单元,由功能单元集合构成的整个***S={M1,M2,M3,……,Mn}寄宿在单一进程P中;
***S在其寄宿进程P中为各个功能单元Mi创建应用程序域:其中Ai∈{A1,A2,......,An};
将各个功能单元Mi寄宿到应用程序域Ai中:Ai{Mi};
***集成各应用程序域及功能单元:
***及各个功能单元寄宿在单一进程中:P(S(Ai{Mi}));
当不同的功能单元之间存在业务关联时,采用跨应用程序域的数据传递方法进行不同的功能单元之间的数据传递;
当功能单元发生异常时,***将该功能单元卸载。
所述***为生产制造执行***时,根据业务功能,将功能单元划分为:计划排产、计划调度、生产追踪、报警管理、物料管理、质量管理、设备管理、工装工具管理、工艺管理、KPI统计分析,针对每个功能单元创建独立的动态运行库。
所述为功能单元创建并配置应用程序域,具体过程如下:
使用System.AppDomain类来创建应用程序域,
使用AppDomainSetup类来配置应用程序域,配置过程如下:(a)、指定应用程序域名称;(b)、指定应用程序域根目录;(c)、指定应用程序域属性:独立域/中立域;(d)、指定应用程序域的安全策略。
所述采用跨应用程序域的数据传递方法进行不同的功能单元之间的数据传递,具体为:
(a)、传值方式:首先将某应用程序域要传递的对象字段序列化到一个内存块中,然后将该内存块传递给另一个应用程序域,最后再执行反序列化得到新的对象。
(b)、传引用方式:当对象的引用被传递给一个目的应用程序域时,CLR会在目的应用程序域中创建一个代理类型的实例,目的应用程序域中的代码将使用这个代理实例来引用对象。
所述***将发生异常时的功能单元的卸载,具体为:
获取发生异常模块所在应用程序域名称;
调用应用程序域卸载函数:System.AppDomain.Unload卸载应用程序域;
释放该应用程序域中的所有资源。
本发明具有以下优点及有益效果:
1.能够有效控制***异常问题影响范围,安全隔离各个功能模块,保障***安全,提高***稳定性。
2.在满足大***分模块开发需求的同时,在***层控制不同子模块抛出的异常问题,最大限度的避免了由于子模块代码异常及业务逻辑异常而造成的***错误。从而可以防止由于子模块开发人员对代码处理的不完善而暴露的异常问题传导至整个***,导致整个***的崩溃,确保***能够长期稳定的运行。
3.该方法充分利用了应用程序域自身特性及安全机制,将功能单元异常信息控制在了所在的应用程序域内部,避免了异常错误无限传导到整个***。同时利用应用程序域的隔离功能,能够防止不同功能单元之间对数据对象的直接引用,避免了由于数据误操作而引起的业务异常。
4.实现对各个业务功能单元的动态集成及卸载功能,根据业务需求可以动态的将不同的功能单元集成到***形成能够满足特定需求的制造执行***,同时当某一功能单元发生异常时,***能够自动将该功能单元卸载,确保不会影响到其他功能单元的稳定运行。
附图说明
图1主框架加载功能单元方式图;
图2***集成方式图。
具体实施方式
下面结合附图1、2详细介绍本方法的具体实施方式。
首先生产制造执行***涉及的范围广泛,可划分为多个独立的功能模块,各功能模块即相互独立也互相关联,在程序开发和集成过程中尽量确保各个子功能模块之间松散耦合,这种相互独立的子功能模块在本发明中称之为功能单元,用Mi表示,功能单元集合如:(M1、M2、M3……),整个生产制造执行***(S表示***)统寄宿在单一进程(P表示进程)中,并且由多个功能单元组成,所以导致所有功能单元都属于同一进程。为了充分的隔离每个功能单元,我们引入了应用程序域,用Ai表示,应用程序域集合如:(A1、A2、A3……),利用应用程序域自身的特性来实现对功能单元的隔离功能。每一个功能单元都寄宿到一个单独的应用程序域中,最后***统一加载各个应用程序域,实现对各功能单元的集成,方法描述如下:
(a)、功能单元的创建:
Define{M1、M2、M3……}。
(b)、***在其寄宿进程中为各个功能单元创建应用程序域:
其中Ai∈{A1、A2、A3......}。
(c)、各功能单元寄宿到应用程序域:
Ai{Mi}
(d)、***集成各应用程序域及功能单元,见图1所示:
其中Ai{Mi}∈{A1{M1}、A2{M2}、A3{M3}......}。
(e)、***及各个功能单元寄宿在单一进程中:
P(S(Ai{Mi}))
将制造执行***划分为多个功能单元M1、M2、M3……,每个功能单元寄宿到独立的应用程序域Ai{Mi},同时***可以创建多个应用程序域,每个应用程序域加载不同的功能单元Ai{Mi}∈{A1{M1}、A2{M2}、A3{M3}......},整个***运行在唯一的进程中P{S},实现***运行于单进程,而功能单元寄宿于多应用程序域。***可以根据需要动态加载或者卸载某一功能单元所在的应用程序域,从而实现功能单元与***的插拔式动态集成方式,***的集成方式见图2所示。
当制造执行***不同的功能单元之间存在业务关联时,这时就存在跨应用程序域的数据传递,一个应用程序域中的代码可以和另一个应用程序域中的类型和对象相互通信,但是这样的通信必须通过一种预先定义的机制进行,跨应用程序域的数据传递方法描述如下:
(a)、传值方式:首先将某应用程序域要传递的对象字段序列化到一个内存块中,然后将该内存块传递给另一个应用程序域,最后再执行反序列化得到新的对象。
(b)、传引用方式:当对象的引用被传递给一个目的应用程序域时,CLR会在目的应用程序域中创建一个代理类型的实例,目的应用程序域中的代码将使用这个代理实例来引用对象。
具体实施步骤如下:
一、创建功能单元
根据业务功能,划分功能单元,将相对独立的功能划分为独立的功能单元,生产制造执行***通常可划分如下几个相对独立功能单元:计划排产、计划调度、生产追踪、报警管理、物料管理、质量管理、设备管理、工装工具管理、工艺管理、KPI统计分析,针对每个功能单元创建独立的动态运行库。
二、为功能单元创建并配置应用程序域
使用System.AppDomain(应用程序域命名空间)类中重载的CreateDomain(创建应用程序域函数)创建应用程序域,可以为应用程序域命名并按该名称来引用应用程序域,如:
AppDomaindomain=AppDomain.CreateDomain(AppDomainName)。
使用AppDomainSetup(应用程序域设置类)为新应用程序域提供带有配置信息的公共语言运行库,创建自己的应用程序域时,最重要的属性是ApplicationBase(程序集根目录),其他AppDomainSetup(应用程序域设置类)类属性主要用于运行时宿主配置特殊的应用程序域。
三、***加载功能单元
在主框架加载功能单元的同时,首先需要创建新的应用程序域,并将功能单元寄宿到创建的应用程序域中,具体代码如下:
newdomain.CreateInstanceAndUnwrap(ComName,ClassName)。
四、功能单元间通信
当功能单元之间存在数据通讯时,涉及到不同应用程序域之间的数据交互,主要通过值传递和引用传递两种方式来实现对不同应用程序域之间的数据传递。
五、***卸载功能单元
当功能单元发生异常时,***需要自动将该功能单元卸载,避免影响整个***的稳定性。例如:当MES***生产追踪模块发生异常时,***主框架根据异常发生的位置及所在动态库名称获取生产追踪子模块所在的应用程序域名称(如:ProductTrackDomain),***主框架根据应用程序域名称调用应用程序域卸载函数:System.AppDomain.Unload(“ProductTrackDomain”)来卸载生产追踪子模块。通过卸载应用程序域的方法来卸载发生异常的生产追踪子模块,***会正常关闭生产追踪子模块,使其不会再向主框架抛出异常。卸载过程中没有新线程可以访问该应用程序域,并且会释放该应用程序域特定的所有数据结构。
Claims (5)
1.一种同一进程下多应用模块客户端的异常处理方法,其特征在于,包括以下步骤:
创建功能单元Mi:以***中相互独立的子模块作为功能单元,由功能单元集合构成的整个***S={M1,M2,M3,……,Mn}寄宿在单一进程P中;
***S在其寄宿进程P中为各个功能单元Mi创建应用程序域:其中Ai∈{A1,A2,......,An};
将各个功能单元Mi寄宿到应用程序域Ai中:Ai{Mi};
***集成各应用程序域及功能单元:
***及各个功能单元寄宿在单一进程中:P(S(Ai{Mi}));
当不同的功能单元之间存在业务关联时,采用跨应用程序域的数据传递方法进行不同的功能单元之间的数据传递;
当功能单元发生异常时,***将该功能单元卸载。
2.根据权利要求1所述的同一进程下多应用模块客户端的异常处理方法,其特征在于,所述***为生产制造执行***时,根据业务功能,将功能单元划分为:计划排产、计划调度、生产追踪、报警管理、物料管理、质量管理、设备管理、工装工具管理、工艺管理、KPI统计分析,针对每个功能单元创建独立的动态运行库。
3.根据权利要求1所述的同一进程下多应用模块客户端的异常处理方法,其特征在于,所述为功能单元创建并配置应用程序域,具体过程如下:
使用System.AppDomain类来创建应用程序域,
使用AppDomainSetup类来配置应用程序域,配置过程如下:(a)、指定应用程序域名称;(b)、指定应用程序域根目录;(c)、指定应用程序域属性:独立域/中立域;(d)、指定应用程序域的安全策略。
4.根据权利要求1所述的同一进程下多应用模块客户端的异常处理方法,其特征在于,所述采用跨应用程序域的数据传递方法进行不同的功能单元之间的数据传递,具体为:
(a)、传值方式:首先将某应用程序域要传递的对象字段序列化到一个内存块中,然后将该内存块传递给另一个应用程序域,最后再执行反序列化得到新的对象;
(b)、传引用方式:当对象的引用被传递给一个目的应用程序域时,CLR会在目的应用程序域中创建一个代理类型的实例,目的应用程序域中的代码将使用这个代理实例来引用对象。
5.根据权利要求1所述的同一进程下多应用模块客户端的异常处理方法,其特征在于,所述***将发生异常的功能单元卸载,具体为:
获取发生异常模块所在应用程序域名称;
调用应用程序域卸载函数:System.AppDomain.Unload卸载应用程序域;
释放该应用程序域中的所有资源。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410709214.6A CN105718322B (zh) | 2014-11-30 | 2014-11-30 | 同一进程下多应用模块客户端的异常处理方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410709214.6A CN105718322B (zh) | 2014-11-30 | 2014-11-30 | 同一进程下多应用模块客户端的异常处理方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105718322A true CN105718322A (zh) | 2016-06-29 |
CN105718322B CN105718322B (zh) | 2018-10-23 |
Family
ID=56145180
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410709214.6A Active CN105718322B (zh) | 2014-11-30 | 2014-11-30 | 同一进程下多应用模块客户端的异常处理方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105718322B (zh) |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108008983A (zh) * | 2017-09-30 | 2018-05-08 | 浙江中控软件技术有限公司 | 基于单进程的多接口数据处理方法 |
CN108694048A (zh) * | 2018-05-04 | 2018-10-23 | 广州慧睿思通信息科技有限公司 | 一种批量发布服务的实现方法 |
CN110019631A (zh) * | 2017-12-28 | 2019-07-16 | 浙江宇视科技有限公司 | 多维地图的处理方法及装置 |
WO2020216166A1 (zh) * | 2019-04-26 | 2020-10-29 | 上海连尚网络科技有限公司 | 一种寄宿应用间的数据传递方法 |
CN113050959A (zh) * | 2019-12-26 | 2021-06-29 | 深圳Tcl新技术有限公司 | 一种***升级方法、终端及存储介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20100146379A1 (en) * | 2008-12-09 | 2010-06-10 | Microsoft Corporation | Isolating applications hosted by plug-in code |
CN103034495A (zh) * | 2012-12-12 | 2013-04-10 | 北京奇虎科技有限公司 | 对网页中插件进行隔离的浏览器及网页插件的隔离方法 |
CN103593190A (zh) * | 2013-11-15 | 2014-02-19 | 北京国双科技有限公司 | 应用程序处理方法及装置 |
-
2014
- 2014-11-30 CN CN201410709214.6A patent/CN105718322B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20100146379A1 (en) * | 2008-12-09 | 2010-06-10 | Microsoft Corporation | Isolating applications hosted by plug-in code |
CN103034495A (zh) * | 2012-12-12 | 2013-04-10 | 北京奇虎科技有限公司 | 对网页中插件进行隔离的浏览器及网页插件的隔离方法 |
CN103593190A (zh) * | 2013-11-15 | 2014-02-19 | 北京国双科技有限公司 | 应用程序处理方法及装置 |
Non-Patent Citations (2)
Title |
---|
王颖: ".NET中对象序列化方法", 《计算机与信息技术》 * |
黄菁 等: "基于.NET的并行数据流设计与实现应用", 《天津科技》 * |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108008983A (zh) * | 2017-09-30 | 2018-05-08 | 浙江中控软件技术有限公司 | 基于单进程的多接口数据处理方法 |
CN108008983B (zh) * | 2017-09-30 | 2023-12-15 | 浙江中控软件技术有限公司 | 基于单进程的多接口数据处理方法 |
CN110019631A (zh) * | 2017-12-28 | 2019-07-16 | 浙江宇视科技有限公司 | 多维地图的处理方法及装置 |
CN110019631B (zh) * | 2017-12-28 | 2021-11-16 | 浙江宇视科技有限公司 | 多维地图的处理方法及装置 |
CN108694048A (zh) * | 2018-05-04 | 2018-10-23 | 广州慧睿思通信息科技有限公司 | 一种批量发布服务的实现方法 |
CN108694048B (zh) * | 2018-05-04 | 2021-08-06 | 广州慧睿思通信息科技有限公司 | 一种批量发布服务的实现方法 |
WO2020216166A1 (zh) * | 2019-04-26 | 2020-10-29 | 上海连尚网络科技有限公司 | 一种寄宿应用间的数据传递方法 |
CN113050959A (zh) * | 2019-12-26 | 2021-06-29 | 深圳Tcl新技术有限公司 | 一种***升级方法、终端及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN105718322B (zh) | 2018-10-23 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105718322A (zh) | 同一进程下多应用模块客户端的异常处理方法 | |
US20190149618A1 (en) | Local proxy for service discovery | |
CN102857370B (zh) | 一种分配资源的方法及装置 | |
CN108885560A (zh) | 用于在软件定义自动化***中分配工作负载的方法 | |
DE102022114301A1 (de) | Software-definiertes prozesssteuerungssystem für industrielle prozessanlagen | |
CN108304267B (zh) | 高可靠低资源开销的多源数据引接方法 | |
DE102022114391A1 (de) | Suchdienst in einem softwaredefinierten Steuerungssystem | |
DE102022115155A1 (de) | Visualisierung eines softwaredefinierten prozesssteuerungsystems für industrielle prozessanlagen | |
US20230153162A1 (en) | Resource capacity management in clouds | |
CN113259447B (zh) | 云平台部署方法、装置、电子设备及存储介质 | |
DE102022114306A1 (de) | E/a-serverdienste, die so konfiguriert sind, dass sie die steuerung in einer prozesssteuerungsumgebung durch containerisierte steuerungsdienste erleichtern | |
DE102022114256A1 (de) | Systeme und verfahren zur dynamisch aufrechterhaltenen redundanz und zum lastausgleich in softwaredefinierten steuerungssystemen für industrielle prozessanlagen | |
DE102022114380A1 (de) | Sicherheitsdienste in einem softwaredefinierten steuerungssystem | |
DE102022114267A1 (de) | Systeme und verfahren zur dynamischen aufrechterhaltung der redundanz und des lastausgleichs in softwaredefinierten steuerungssystemen für industrielle prozessanlagen | |
DE102022114542A1 (de) | Suchdienst in einem softwaredefinierten steuerungssystem | |
DE102022114799A1 (de) | Systeme und verfahren zur zuordnung von modulen in einem softwaredefinierten steuerungssystem für industrielle prozessanlagen | |
CN109873714B (zh) | 云计算节点配置更新方法及终端设备 | |
DE102022114375A1 (de) | Sicherheitsdienste in einem softwaredefiniertensteuerungssystem | |
DE102022114281A1 (de) | Softwaredefiniertes steuerungssystem mit e/a-serverdiensten, die mit containerisierten diensten kommunizieren | |
DE102022114305A1 (de) | E/a serverdienste zur auswahl und verwendung aktiver steuerungsausgänge von containerisierten steuerungsdiensten in einer prozesssteuerungsumgebung | |
DE102022115152A1 (de) | Visualisierung eines softwaredefinierten prozesssteuerungssystems für industrielle prozessanlagen | |
US20230342183A1 (en) | Management method and apparatus for container cluster | |
CN105656947A (zh) | 一种交易中间件与第三方***交互的方法、装置和*** | |
DE102022114307A1 (de) | Nutzung von dienstqualitätsmetriken zur erleichterung von übergängen zwischen e/a-kanälen für e/a-serverdienste | |
DE102022114302A1 (de) | Softwaredefiniertes prozesssteuerungssystem und verfahren für industrielle prozessanlagen |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |