• C# Remoting的一个简单例子


    .Net对于远程调用提供了两种方法:Remoting和WebService。
    WebService现在是如火如荼,特别是有一种比较流行的架构:Winform+WebService(Java、.Net),
    我曾经做过的一个项目就是这样子的,分布式、跨平台、极佳的用户体验,这三者结合起来是不是很诱人?
    不过,这里我只说Remoting,Remoting具有以下特点:
    1、Tcp通道的Remoting速度非常快
    2、虽然是远程的,但是非常接近于本地调用对象
    3、可以做到保持对象的状态
    4、没有应用程序限制,可以是控制台,winform,iis,windows服务承载远程对象
    缺点:
    1、不是标准的应用,因此有平台限制
    2、脱离iis的话需要有自己的安全机制
    可以看出来,比起WebService,Remoting更适合于中小型局域网应用,而不适用于企业级的应用。
    下面给出一个极其简单的Sample:
    Remoting用的对象:

    namespace RemoteSample
     2{
     3    public class RemoteObject : System.MarshalByRefObject
     4    {
     5        public RemoteObject()
     6        {
     7            System.Console.WriteLine("New Referance Added!");
     8        }
     9
    10        public int sum(int a, int b)
    11        {
    12            return a + b;
    13        }
    14    }
    15}

    将其编译为一个lib文件:csc /t:library RemoteObject.cs

    Server端:

     1using System;
     2using System.Runtime;
     3using System.Runtime.Remoting;
     4using System.Runtime.Remoting.Channels;
     5using System.Runtime.Remoting.Channels.Tcp;
     6using RemoteSample;
     7
     8namespace RemoteSampleServer
     9{
    10    public class RemoteServer
    11    {
    12        public static void Main(String[] args)
    13        {
    14             TcpServerChannel channel = new TcpServerChannel(6666);
    15             ChannelServices.RegisterChannel(channel);
    16             RemotingConfiguration.RegisterWellKnownServiceType(typeof(RemoteObject),
    17                 "RemoteObject", WellKnownObjectMode.SingleCall);
    18             System.Console.WriteLine("Press Any Key");
    19             System.Console.ReadLine();
    20         }
    21    }
    22}

    将其编译为一个exe文件:csc /r:System.Runtime.Remoting.dll /r:RemoteObject.dll RemoteServer.cs

    Client端:

     1using System;
     2using System.Runtime.Remoting;
     3using System.Runtime.Remoting.Channels;
     4using System.Runtime.Remoting.Channels.Tcp;
     5using RemoteSample;
     6
     7namespace RemoteSampleClient
     8{
     9    public class RemoteClient
    10    {
    11        public static void Main(string[] args)
    12        {
    13            ChannelServices.RegisterChannel(new TcpClientChannel());
    14            RemoteObject remoteobj = (RemoteObject)Activator.GetObject(typeof(RemoteObject),
    15            "tcp://localhost:6666/RemoteObject");
    16            Console.WriteLine("1 + 2 = " + remoteobj.sum(1,2).ToString());
    17            Console.ReadLine();
    18        }
    19    }
    20}

    同样的,将其编译为exe文件:csc /r:System.Runtime.Remoting.dll /r:RemoteObject.dll RemoteClient.cs

    好了,一次运行生成的RemoteServer.exe和RemoteClient.exe,你就会发现原来Remoting是这样简单。

  • 相关阅读:
    css选择器优先级
    内置函数filter和map
    hdu 3068 最长回文 manacher算法(视频)
    hdu 5752 Sqrt Bo
    HDU 2176 取(m堆)石子游戏(Nim)
    HDU 2188 悼念512汶川大地震遇难同胞――选拔志愿者(巴什博奕)
    HDU 2897 邂逅明下(巴什博奕)
    POJ 1740 A New Stone Game(普通博弈)
    HDU 2516 取石子游戏(斐波那契博弈)
    hdu 1361 Parencodings 简单模拟
  • 原文地址:https://www.cnblogs.com/ChineseMoonGod/p/6121052.html
Copyright © 2020-2023  润新知