很久以前我写的一个东西。。
一直没时间整理放出来
今晚无聊就把它弄出来了。。给大家参考参考。。如果需要源码请上我的博客下:http://www.jiamaocode.com/Pros/1131.shtml
我们来用一个实例来讲一下这个系统的使用方法:
 
首先建一个接口
折叠展开C# 代码
namespace ITestDll   
{   
    public interface ITest   
    {   
        int TestServer(int a, int b);   
    }   
}  
里面有一个测试方法TestServer,
 
再创建一个类:
折叠展开C# 代码
namespace TestDll   
{   
    public class Test:MarshalByRefObject, ITestDll.ITest   
    {   
        public int TestServer(int a, int b)   
        {   
            BASECOMMON.ProcessManager.ShowNormalInfo("我现在在服务器端执行!");   
            BASECOMMON.ProcessManager.ShowNormalInfo("您输入的a=" + a);   
            BASECOMMON.ProcessManager.ShowNormalInfo("您输入的b=" + b);   
            int c = a + b;   
            BASECOMMON.ProcessManager.ShowNormalInfo("执行的结果为:" + c);   
  
            return c;   
        }   
    }   
}  
它只是简单对上面的接口进行实现,别忘了继承MarshalByRefObject,这是每个remoting代理类必须的。
 
编译好它们后,把它们一起拷贝到BaseSystemService的debug目录下
配置好BaseSystemService中的RemotingConfig.xml文件
  
其内容如下:
 
折叠展开XML/HTML 代码
<?xml version="1.0" encoding="utf-8" ?>  
  
<RemotingConfig>  
     
  <!--服务配置-->  
  <ServerConfig>  
    <Name value="RemoteingServer" description="信道名称" />  
    <ChannelType value="TCP" description="服务注册协议类型" />  
    <Port value="8081" description="远程代理端口" />  
  </ServerConfig>  
     
  <!--需要注册的远程代理-->  
  <RegisterWellKnownServiceType>  
  
    <TestDll Register="true">  
      <Path value="TestDll.dll" description="对象文件的路径" />  
      <ClassName value="TestDll.Test" description="要注册对象的类全路径" />  
      <UriName value="TestDll" description="要注册成URI的名称" />  
      <WellKnownObjectMode value="Singleton" description="为每个连接提供实例方式" />  
    </TestDll>  
      
  </RegisterWellKnownServiceType>  
     
</RemotingConfig>  
其它的就不多说了。。
<Path value="TestDll.dll" description="对象文件的路径" />  这里是你们注册为服务的DLL的路径,一般最好在根目录下。
 <ClassName value="TestDll.Test" description="要注册对象的类全路径" />  这个是你们注册此DLL中的类的名。包含命名空间
<UriName value="TestDll" description="要注册成URI的名称" />  这里是此类注册成服务的标识,相当于网站的url路径一样。访问是通过IP端口和它
 
这些节点是可以重复配置多个的。比如你还要注册另一个DLL中的类的话。只要在里面加
折叠展开XML/HTML 代码
<?xml version="1.0" encoding="utf-8" ?>      
      
<RemotingConfig>      
         
  <!--服务配置-->      
  <ServerConfig>      
    <Name value="RemoteingServer" description="信道名称" />      
    <ChannelType value="TCP" description="服务注册协议类型" />      
    <Port value="8081" description="远程代理端口" />      
  </ServerConfig>      
         
  <!--需要注册的远程代理-->      
  <RegisterWellKnownServiceType>      
      
    <TestDll Register="true">      
      <Path value="TestDll.dll" description="对象文件的路径" />      
      <ClassName value="TestDll.Test" description="要注册对象的类全路径" />      
      <UriName value="TestDll" description="要注册成URI的名称" />      
      <WellKnownObjectMode value="Singleton" description="为每个连接提供实例方式" />      
    </TestDll>      
  
<TestDll2 Register="true">      
      <Path value="TestDll2.dll" description="对象文件的路径" />      
      <ClassName value="TestDll2.Test2" description="要注册对象的类全路径" />      
      <UriName value="TestDll2" description="要注册成URI的名称" />      
      <WellKnownObjectMode value="Singleton" description="为每个连接提供实例方式" />      
    </TestDll2>      
  
          
  </RegisterWellKnownServiceType>      
         
</RemotingConfig>   
• 
 配置好它后
就可以创建一个测试的客户端
如下:
 
 
打开其中的LocalObjectConfig.xml
配置你可以访问的服务端代理,此项目别忘了引用代理对象所实现的那个接口,也就是我们第一个创建的ITestDll   
 
折叠展开XML/HTML 代码
<?xml version="1.0" encoding="utf-8" ?>  
<LocalConfig>  
  <!--远程代理对象-->  
  <RemoteObject>  
  
    <TestDll>  
      <Protocol value="TCP" description="代理对象采用的协议" />  
      <NetAddress value="127.0.0.1" description="代理服务器的IP地址" />  
      <Port value="8081" description="代理服务器采用的端口" />  
      <Uri value="TestDll" description="代理对象的标识路径" />  
    </TestDll>  
  </RemoteObject>  
  
  <!--本地对象-->  
  <LocalObject>  
  
    <ObjectName>  
      <Path value="" />  
      <ClassName value="" />  
    </ObjectName>  
  </LocalObject>  
</LocalConfig>  
 
<RemoteObject>  就是我们用来访问远程代码的配置,当然这里跟SERVER端配置一样。可以重复配置多个访问代理
 
下面就看我们怎么从客户端访问远程 了
 
折叠展开C# 代码
static void Main(string[] args)   
       {               
           ITestDll.ITest test = BASECOMMON.RemoteObjectManager.CreateRemoteObject("TestDll",typeof(ITestDll.ITest)) as ITestDll.ITest;   
           int c = test.TestServer(10,20);   
           Console.WriteLine("返回的结果为:" + c);   
           Console.ReadLine();   
       }  
利用我封装好的RemoteObjectManager就可以轻松实现
获取一个对象。
其中“TestDll”就是我们配置的节点
<TestDll>   
•      <Protocol value="TCP" description="代理对象采用的协议" />  
•      <NetAddress value="127.0.0.1" description="代理服务器的IP地址" />  
•      <Port value="8081" description="代理服务器采用的端口" />  
•      <Uri value="TestDll" description="代理对象的标识路径" />  
•    </TestDll>   
 
 
下面看看执行结果:
 
 
 
 
并且此服务还支持,注册成系统服务。停止启动服务和卸载它本身。
普通启动是带参数/debug,注册成系统服务是用参数/install启动,卸载是参数/unstall
 
注册服务前需要修改好ServiceConfig.xml
折叠展开XML/HTML 代码
01.<?xml version="1.0" encoding="utf-8" ?>  
02.<Service>  
03.  <ServiceName value="SERVICE1" description="系统服务名" />  
04.  <ServiceDescription value="test" description="服务说明" />  
05.  <ServiceDisplayName value="Test" description="服务简介" />    
06.</Service>  
 
 
此就不多讲了。。