zoukankan      html  css  js  c++  java
  • C# rmi例子

    接口定义

    实体定义,注意需要序列化

    
    using System;
    namespace Interface
    {
        [Serializable]
        public class DataEntity
        {
            public string ReportName { get; set; }
            public string ReportId { get; set; }
    
        }
    }
    
    
    

    接口定义

    
    namespace Interface
    {
        public interface IDataCenter
        {
            string Query();
            DataEntity QueryData();
        }
    }
    
    

    服务端

    实现类

    using System;
    using Interface;
    
    namespace Server
    {
        class DataCenterImpl : MarshalByRefObject, Interface.IDataCenter
        {
            #region IDataCenter 成员
    
            public string Query()
            {
                return "I'm server";
            }
    
            #endregion
    
            #region IDataCenter 成员
    
    
            public Interface.DataEntity QueryData()
            {
                DataEntity ret = new DataEntity();
                ret.ReportId = Guid.NewGuid().ToString();
                ret.ReportName = "GSM报告";
                return ret;
            }
    
            #endregion
        }
    }
    
    

    主方法

    using System;
    using System.Runtime.Remoting;
    using System.Runtime.Remoting.Channels;
    using System.Runtime.Remoting.Channels.Tcp;
    using System.Threading;
    
    namespace Server
    {
        class Program
        {
            static void Main(string[] args)
            {
                Console.WriteLine("我是服务端");
                TcpServerChannel chan = new TcpServerChannel(9999);
                ChannelServices.RegisterChannel(chan, false);
                RemotingConfiguration.RegisterWellKnownServiceType(typeof(DataCenterImpl), "server", WellKnownObjectMode.SingleCall);
                Console.WriteLine("按q退出");
                while (Console.ReadKey().KeyChar != 'q')
                {
                    Thread.Sleep(10);
                }
            }
        }
    }
    
    

    客户端

    using System;
    using System.IO;
    using System.Runtime.Remoting.Channels;
    using System.Runtime.Remoting.Channels.Tcp;
    using Interface;
    
    namespace Client
    {
        class Program
        {
            private static readonly log4net.ILog logger = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
    
            static void Main(string[] args)
            {
                log4net.Config.XmlConfigurator.Configure(new FileInfo("Log4net.xml"));
                TcpClientChannel chan = new TcpClientChannel();
                ChannelServices.RegisterChannel(chan, false);
                IDataCenter idc = (IDataCenter)Activator.GetObject(typeof(IDataCenter), "tcp://localhost:9999/server", null);
    
                string value = idc.Query();
                logger.Info(value);
                var entity = idc.QueryData();
                Console.WriteLine(entity.ReportId + "	" + entity.ReportName);
                Console.Read();
            }
        }
    }
    
    
  • 相关阅读:
    第二周c语言PTA作业留
    2018第零次作业
    总结报告
    第14/15周作业
    第七周作业
    第六周作业
    第四次作业
    第三次作业
    大学第二次作业
    大学的第一次作业
  • 原文地址:https://www.cnblogs.com/wardensky/p/4685738.html
Copyright © 2011-2022 走看看