zoukankan      html  css  js  c++  java
  • C# .net Remoting最简单的例子

    C# .net Remoting最简单的例子

     C# Remoting例子下载

    服务端: 

    using System;
    using System.Runtime.InteropServices;
    using System.Runtime.Remoting.Channels.Tcp;
    using System.Runtime.Remoting.Channels;
    using System.Runtime.Remoting;
    //在引用中添加
    namespace RemotingTest
    {
        class Program
        {    
            static void Main(string[] args)
            {
                try
                {
                    TcpServerChannel server = new TcpServerChannel(4567); //端口
                    ChannelServices.RegisterChannel(server, false); //注册通道
                    
    //客户端每次请求, Singleton是同用一个实例, singlecall是用各个实例
                    
    //Singleton和SingleCall都是服务端激活模式(WellKnown模式), 另外还有两种客户端激活模式
                    RemotingConfiguration.RegisterWellKnownServiceType(typeof(RemotingObj.PictureInfo), "MyRemotingService", WellKnownObjectMode.Singleton);
                    Console.WriteLine("服务正常启动");
                }
                catch (Exception ex) { Console.WriteLine(ex.ToString() + "失败了!"); }
                while (true) { }
            }
        }
    }
    //remoting, webservice传送的对像都要新建一个命名空间
    //这个可以生成一个dll 在服务和客户端都引用
    namespace RemotingObj
    {
        //[Serializable]只调用方法时可写可不写, 传送对像时要写
        public class PictureInfo : MarshalByRefObject
        {
            public string GetPicinfo(string strName)
            {
                return "已返回[" + strName + "]的信息";
            }
            ////SingleCall启动例子要重写InitializeLifetimeService函数, 
            
    ////return null可以使各个实例一直存在 多用在聊天室客户端与服务端相连
            //public override object InitializeLifetimeService()
            
    //{
            
    //    return null;
            
    //}
        }

    } 

    客户端:

     using System;

    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Runtime.Remoting.Channels;
    using System.Runtime.Remoting.Channels.Tcp;

    namespace Client
    {
        class Program
        {
            static void Main(string[] args)
            {
                ChannelServices.RegisterChannel(new TcpClientChannel(), false); //注册通道
                string strRemoteAddress = @"tcp://localhost:4567/MyRemotingService";
                RemotingObj.PictureInfo pic = (RemotingObj.PictureInfo)Activator.GetObject(typeof(RemotingObj.PictureInfo), strRemoteAddress);
                string str = pic.GetPicinfo("Mypic");
                Console.WriteLine("Remoting连结成功...\n" + str);
                Console.ReadKey();
            }
        }
    }
    namespace RemotingObj
    {

        public class PictureInfo : MarshalByRefObject
        {
            public string GetPicinfo(string strName)
            {
                return "";
            }
        }
    }
  • 相关阅读:
    c++ 设计模式3 (重构技法 Template Method)
    C++ 设计模式2 (面向对象设计原则)
    c++ 设计模式1
    算法总结—二分搜索与旋转排序数组
    c++ 构造函数,拷贝构造函数,析构函数与赋值操作符
    题解 P2330 【[SCOI2005]繁忙的都市】
    题解 CF896C 【Willem, Chtholly and Seniorious】
    题解 P3369 【【模板】普通平衡树】
    题解 CF383C 【Propagating tree】
    题解 P1179 【数字统计】
  • 原文地址:https://www.cnblogs.com/barrysgy/p/2281067.html
Copyright © 2011-2022 走看看