.net remoting实例

1.通信协议,两个基本功能,显示消息和发送消息。
 /// <summary>
    /// 服务器端回调接口
    /// </summary>
    public interface IChatCallback
    {
        /// <summary>
        /// 回调方法,显示聊天消息
        /// </summary>
        /// <param name="message"></param>
        void ShowMessage(string message);
    }

 public interface IDuplexChat
    {
        void SendMessage(string message, IChatCallback callBack);
    }
2.客户端,录入消息,并使用协议发送出去。
class Program
    {
        static IDuplexChat proxy = null;
        static string message = string.Empty;

        static void Main(string[] args)
        {
            RemotingConfiguration.Configure("ChatRoom.Client.exe.config", false);
            proxy  = (IDuplexChat)Activator.GetObject(typeof(IDuplexChat), "http://localhost:8080/ChatRoom/ChatRoomURL");

            message = Console.ReadLine();
            SendMessage(message);
        }

        private static void SendMessage(string message)
        {
            proxy.SendMessage(message, new ChatRoomCallBackHandler());

            message = Console.ReadLine();
            if (message != "exit")
            {
                SendMessage(message);
            }
        }
    }
3.服务器端,客户端调用的时候有一个服务器的url,根据该统一资源标示符找到服务器的提供的基于协议的服务。那么,服务器需要实现该协议,并给客户端返回些结果什么的。
/// <summary>
    /// 实现.net remoting按引用封送的类型
    /// </summary>
    public class DuplexChatRemoting : MarshalByRefObject, IDuplexChat
    {
        public void SendMessage(string message, IChatCallback callBack)
        {
            Console.WriteLine("Invoke the method SendMessage()");

            //do other......
            callBack.ShowMessage(message);
        }
    }
4.客户端、服务器和协议都有了。那么客户端随时都有可能访问服务器端,那么就需要服务器端一直运行着。因此需要一个寄宿器,让服务器端跑起来。
    class Program
    {
        static void Main(string[] args)
        {
            RemotingConfiguration.Configure("ChatRoom.ConsoleHost.exe.config", false);
            Console.WriteLine(".Net Remoting 服务已启动......");
            Console.Read();
        }
    }
5.如果想做的更好,弄个安装包,可以在任意机器上跑客户端,去访问服务器。

写的匆忙,欢迎评论!

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。