| 
				 四、程序代码 
创建类库项目SysInfoServer,其中设计了可远程类型SysInfo类,它继承了MarshalByRefObject类型,其方法主要完成对远程主机的信息读取。其信息包括了机器名称、版本号、用户名、用户所在域、系统目录等。实现的代码如下: 
using System; 
using System.Collections; 
namespace SysInfoServer 
{ 
    /// <summary> 
    /// 摘要说明。 
    /// </summary> 
    public class SysInfo:MarshalByRefObject 
    { 
        public string GetCurrentTime() 
        { 
            return DateTime.Now.ToLongTimeString(); 
        } 
        public string GetWorkingSet() 
        { 
            return Environment.WorkingSet.ToString(); 
        } 
        public string GetVersion() 
        { 
            return Environment.Version.ToString(); 
        } 
        public string GetUserName() 
        { 
            return Environment.UserName; 
        } 
        public string GetUserDomainName() 
        { 
            return Environment.UserDomainName; 
        } 
        public string GetSystemDirectory() 
        { 
            return Environment.CurrentDirectory; 
        } 
        public string GetMachineName() 
        { 
            return Environment.MachineName; 
        } 
        public string GetCurrentDirectory() 
        { 
            return Environment.CurrentDirectory; 
        } 
        public string GetOSVersion() 
        { 
            return Environment.OSVersion.ToString(); 
        } 
    } 
} 
编译类库项目,生成SysInfoServer.dll库文件。 
创建基于控制台的服务器端项目RemotingServer。在引用里添加System.Runtime.Remoting和刚编译好的SysInfoServer.dll库文件。编写相应代码如下: 
using System; 
using System.Runtime.Remoting; 
using System.Runtime.Remoting.Channels; 
using System.Runtime.Remoting.Channels.Tcp; 
using SysInfoServer; 
  
class MyApp 
{ 
    static void Main() 
    { 
    //创建TCP信道 
        TcpServerChannel channel=new TcpServerChannel(10001); 
    //注册信道 
        ChannelServices.RegisterChannel(channel,false); 
    //注册远程对象类型 
        RemotingConfiguration.RegisterWellKnownServiceType(typeof(SysInfo), "SysInfo", WellKnownObjectMode.SingleCall); 
        Console.WriteLine("远程服务器正在运行中,按Enter键退出"); 
        Console.ReadLine (); 
     } 
} 
编译项目,生成RemotingServer.exe可执行文件。 
创建基于控制台或Windows窗体的客户端端项目RemotingClient。在引用里添加System.Runtime.Remoting和刚编译好的SysInfoServer.dll库文件。编写相应代码如下: 
using System; 
using System.Runtime.Remoting; 
using System.Runtime.Remoting.Channels; 
using System.Runtime.Remoting.Channels.Tcp; 
using SysInfoServer; 
namespace TimeClient 
{ 
    class MyApp 
    { 
     
        static void Main(string[] args) 
        { 
        //创建TCP信道 
            TcpClientChannel channel=new TcpClientChannel(); 
        //注册信道 
            ChannelServices.RegisterChannel(channel, false);  
            try 
            { 
        //获取远程对象 
                RemotingConfiguration.RegisterWellKnownClientType(typeof(SysInfo), "tcp://localhost:10001/SysInfo"); 
                SysInfo info = new SysInfo(); 
                Console.WriteLine("远程系统信息列表"); 
                Console.WriteLine("机器名称:" + info.GetMachineName()); 
                Console.WriteLine("版本号:" + info.GetVersion()); 
                Console.WriteLine("用户名:" + info.GetUserName()); 
                Console.WriteLine("用户所在域:" + info.GetUserDomainName()); 
                Console.WriteLine("系统目录:" + info.GetSystemDirectory()); 
                Console.WriteLine("当前目录:" + info.GetCurrentDirectory()); 
                Console.WriteLine("系统版本:" + info.GetOSVersion()); 
                Console.WriteLine("当前时间:" + info.GetCurrentTime()); 
                Console.ReadLine(); 
            } 
            catch  
            { 
                Console.WriteLine("发生错误了!"); 
            } 
        } 
    } 
} 
编译项目,生成RemotingClient.exe执行文件。 
五、结语 
本文通过远程主机信息获取程序并介绍了.NET Remoting程序设计的基本思路与框架。当前很多企业级服务都是基于 .NET 远程处理基础结构构建的,它不仅可以提供 COM+ 分布式对象模型所具备的所有丰富性和灵活性,而且包括支持大范围分布式事务。笔者希望在此能抛砖引玉,使读者通过了解本程序框架的基础上并做一些必要修改(比如可远程类型设计的修改)开发出更加功能强大的应用。 
  			
				 |