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

  • 相关阅读:
    [vue/cli4] 目录public和asset区别
    VSCode常用指令
    [vue] JS导出Excel
    各设计模式总结与对比及Spring编程思想
    JavaIO演进之路
    用300行代码手写提炼Spring的核心原理
    设计模式(六)之装饰器模式(Decorator Pattern)深入浅出
    设计模式(五)之适配器模式(Adapter Pattern)深入浅出
    设计模式(四)之模板模式(Template Method Pattern)深入浅出
    设计模式(二)之委派模式(Delegate Pattern)深入浅出
  • 原文地址:https://www.cnblogs.com/yy1234/p/9111145.html
Copyright © 2011-2022 走看看