关于Remoting服务启动和停止的简单总结 (转)
2007-08-18 20:44
288 查看
很长一段时间,哪里工作紧急,哪里需要帮助,我就得往哪冲。工作了N年时间,经历和很多事情,想明白了一些事情,心态也好了很多。我想不论在什么公司,不论做什么工作,我们都可以从中获取些东西,都有机会实现我们的价值,关键是心态。前几天刚解决了几个问题,这不又来了一个问题。
公司有一个系统,使用Remoting实现分布式通信。服务端用于管理远程服务,完成注册和注销等工作。因为对于服务端的控制要求并不是很高,所以以前在实现注册和注销功能时都需要重新启动服务端,从而重新加载最新的服务。如果是配置一次两次还不觉得什么,可是如果改动很多,特别是开发期间注册新的服务,则很不方便,需要重启N次服务端。于是,工作就来了:要求改造控制单个服务而不影响其他服务或者重新启动系统。
因为是针对每个服务的控制,不希望在控制一个服务的时候,影响其他的服务,所以在这里使用了RemotingServices.Disconnect,而没有使用注销信道的方法ChannelServices.UnregisterChannel。
为了实现这个功能,定义了一个ServiceContainer类,有一个服务集合变量IDictionary<string,MarshalByRefObject> serviceObjectTable,用于缓存在服务端启动的服务对象。我还定义两个方法StartService和StopService方法,实现分别如下:
public void StartService(System.Type serviceType)
public void StopService(System.Type serviceType)
TypeReflect reflect = new TypeReflect();
ServiceAttribute sa = reflect.GetServiceAttribute<ServiceAttribute>(serviceType);
string key = serviceType.FullName + "_" + sa.Version;
if (serviceObjectTable.Keys.Contains(key))
RemotingServices.Disconnect(serviceObjectTable[key]);
serviceObjectTable.Remove(key);
}
}
其实最主要的步骤就是 :
启动:MarshalByRefObject serviceObj = System.Activator.CreateInstance(serviceType) as MarshalByRefObject;
RemotingServices.Marshal(serviceObj, key);
停止:
RemotingServices.Disconnect(_ServiceObjectTable[key]);
公司有一个系统,使用Remoting实现分布式通信。服务端用于管理远程服务,完成注册和注销等工作。因为对于服务端的控制要求并不是很高,所以以前在实现注册和注销功能时都需要重新启动服务端,从而重新加载最新的服务。如果是配置一次两次还不觉得什么,可是如果改动很多,特别是开发期间注册新的服务,则很不方便,需要重启N次服务端。于是,工作就来了:要求改造控制单个服务而不影响其他服务或者重新启动系统。
因为是针对每个服务的控制,不希望在控制一个服务的时候,影响其他的服务,所以在这里使用了RemotingServices.Disconnect,而没有使用注销信道的方法ChannelServices.UnregisterChannel。
为了实现这个功能,定义了一个ServiceContainer类,有一个服务集合变量IDictionary<string,MarshalByRefObject> serviceObjectTable,用于缓存在服务端启动的服务对象。我还定义两个方法StartService和StopService方法,实现分别如下:
public void StartService(System.Type serviceType)
public void StopService(System.Type serviceType)
TypeReflect reflect = new TypeReflect();
ServiceAttribute sa = reflect.GetServiceAttribute<ServiceAttribute>(serviceType);
string key = serviceType.FullName + "_" + sa.Version;
if (serviceObjectTable.Keys.Contains(key))
RemotingServices.Disconnect(serviceObjectTable[key]);
serviceObjectTable.Remove(key);
}
}
其实最主要的步骤就是 :
启动:MarshalByRefObject serviceObj = System.Activator.CreateInstance(serviceType) as MarshalByRefObject;
RemotingServices.Marshal(serviceObj, key);
停止:
RemotingServices.Disconnect(_ServiceObjectTable[key]);
相关文章推荐
- 关于Remoting服务启动和停止的简单总结
- 关于mysql服务启动后又停止的错误的简单记录
- 关于linux下的nginx、php、mysql的服务启动、停止、重启命令
- [总结]PostgreSQL服务启动又停止的解决方法
- Genymotion关于【启动后player.exe已停止运行】解决方案总结
- Remoting服务集成到IIS的简单总结
- 关于解决WebSphere服务不能启动问题的几点经验总结
- Binder框架的一些简单总结(关于自定义服务中的Binder)
- Remoting服务集成到IIS的简单总结
- 关于ArcGIS10.0版本的SDE密码修改,账户锁定,SDE服务启动又停止等问题的解决
- 两个简单的shell脚本(关于启动和服务)
- 关于5.7.12Mysq 启动失败,本地计算机上的MySQL服务启动后停止。某些服务在未由其他服务或程序使用时将自动停止?
- 第一行代码总结:9.3服务的基本用法——启动和停止服务
- 服务启动后又停止了。一些服务自动停止,如果它们没有什么可做的,例如“性能日志和警报服务”
- OracleOraDb11g_home1TNSListener服务启动后自动停止
- 关于开发个简单应用(账号管家)的总结
- svn服务的停止与启动
- 启动oracle10g监听器错误:本地计算机上的OracleOraDb10g_home1TNSListener服务启动后又停止了
- 写一个简单控制台启动的mcv服务
- 启动和停止mysql服务