zoukankan      html  css  js  c++  java
  • C# 远程调用实现案例

    C#远程调用实现案例

     C#实现远程调用主要用到“System.Runtime.Remoting”这个东西。下面从三个方面给于源码实例。

    ·服务端:

    using System.Runtime.Remoting.Channels;
    using System.Runtime.Remoting.Channels.Tcp;
    using System.Runtime.Remoting;

    namespace RemoteSample
    {
        class server
        {
            static int Main(string[] args)
            {
                //注册通道
                TcpChannel chan = new TcpChannel(8085);        
                ChannelServices.RegisterChannel(chan);
                string sshan = chan.ChannelName;
                System.Console.WriteLine(sshan);
                //注册远程对象,即激活.
                RemotingConfiguration.RegisterWellKnownServiceType(typeof(RemoteSample.HelloServer), "SayHello", WellKnownObjectMode.SingleCall);
                System.Console.WriteLine("Hit <ennter> to exit...");
                System.Console.ReadLine();
                return 0;
            }
        }
    }

    ·客户端:

    using System.Runtime.Remoting.Channels.Tcp;
    using System.Runtime.Remoting.Channels;

    namespace RemoteSample
    {
        public class Client
        {
            public static int Main(string[] args)
            {
                TcpChannel chan = new TcpChannel();
                ChannelServices.RegisterChannel(chan);
                HelloServer obj =(HelloServer)Activator.GetObject(typeof(HelloServer), "tcp://localhost:8085/SayHello");
                if (obj == null)
                    System.Console.WriteLine("Could   not   locate   server");
                else Console.WriteLine(obj.HelloMethod("Caveman"));
                return 0;   

            }

        }
    }

    ·远程对象:(重点),该对象是一个dll的程序集,同时被客户端和服务器端引用。

    namespace RemoteSample
    {
        //客户端获取到服务端的对象实际是一个对象的引用,因此必须继承:MarshalByRefObject
        public class HelloServer : MarshalByRefObject
        {
            public HelloServer()
            {
                Console.WriteLine("HelloServer   activated");
            }

            public String HelloMethod(String name)
            {
                Console.WriteLine("Hello.HelloMethod   :   {0}", name);
                return "Hi there " + name;
            }

            //说明1:在Remoting中的远程对象中,如果还要调用或传递某个对象,例如类,或者结构,则该类或结构则必须实现串行化Attribute[SerializableAttribute]:
            //说明2:将该远程对象以类库的方式编译成Dll。这个Dll将分别放在服务器端和客户端,以添加引用
            //说明3:在Remoting中能够传递的远程对象可以是各种类型,包括复杂的DataSet对象,只要它能够被序列化
        }

    注意上述代码的注释,由于远程服务的特殊性,因此在此做了详细的批注,怕大伙不理解。

    OK。C#的远程调用就实现完成了,这中应用一般在三层架构中应该比较平常使用。至于这种方式的优缺点,在下还不好说,希望有过实际应用的同志给总结一些,谢谢!!!

  • 相关阅读:
    NYOJ 10 skiing DFS+DP
    51nod 1270 数组的最大代价
    HDU 4635 Strongly connected
    HDU 4612 Warm up
    POJ 3177 Redundant Paths
    HDU 1629 迷宫城堡
    uva 796
    uva 315
    POJ 3180 The Cow Prom
    POJ 1236 Network of Schools
  • 原文地址:https://www.cnblogs.com/yy1234/p/9111145.html
Copyright © 2011-2022 走看看