.NET中多模块分布式系统的简单服务访问:OSGI原形2014-07-03 cnblogs Aaron先描述一下本篇描述的适用场景(3台server, 各个模块分布在各个Server上 ,分布式模块互相依赖、交互的场景):

多个OSIG引擎交互上,使用的是.net remoting实现的,原理:当请求某个接口时(也就是要获取某Service Instance时),OSGI通过 remoting连接到提供这个服务的url上,如:tcp://localhost:8888/OSGI连接成功后,源OSGI发送OpenService命令,让目标OSGI注册TCP Channel根据接口type、dll路径、appdomain name,在某个AppDomain中执行解析接口 ,然后连接到目标OSGI新开的服务上(AppDomain.DoCallBack)在配置上,除了上篇文章中的模块配置信息外,在Manifests.xml文件中也加 入了分布式服务配置,如下:Manifests.xml
<?xml version="1.0" encoding="utf-8" ?><Manifests><ServicePort>1000</ServicePort><RemoteServiceMap><Service TargetIP="127.0.0.1" TargetPort="2000">OrderModule.PublicInterfaces.IOrderProcessor</Service></RemoteServiceMap></Manifests>//这个代表:当前宿主没有模块承载,但是能和其他宿主通信,达到转发的目的
既有本地模块,又有远程服务依赖时的配置文件
<?xml version="1.0" encoding="utf-8" ?><Manifests><ServicePort>2000</ServicePort><Manifest>D:documentsvisual studio 2010ProjectsOSGIDemoOrderModuleinDebugManifest.xml</Manifest>//本地模块定义<RemoteServiceMap><Service TargetIP="127.0.0.1" TargetPort="3000">LoggingModule.PublicInterfaces.ILog</Service>//给ILog这个接口提供服务的真正服务在远程server上,是个远程依赖</RemoteServiceMap></Manifests>
<?xml version="1.0" encoding="utf-8" ?><Module><Name>Order Module</Name><Version>1</Version><Assembly>OrderModule</Assembly><Activator>OrderModule.Activator</Activator><RequiredService>LoggingModule.PublicInterfaces.ILog</RequiredService>//此处的配置没有什么特别的<ProvidedService>OrderModule.PublicInterfaces.IOrderProcessor</ProvidedService></Module>