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用的对象:

 1namespace  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端:
 1 using  System;
 2 using  System.Runtime;
 3 using  System.Runtime.Remoting;
 4 using  System.Runtime.Remoting.Channels;
 5 using  System.Runtime.Remoting.Channels.Tcp;
 6 using  RemoteSample;
 7
 8 namespace  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端:
 1 using  System;
 2 using  System.Runtime.Remoting;
 3 using  System.Runtime.Remoting.Channels;
 4 using  System.Runtime.Remoting.Channels.Tcp;
 5 using  RemoteSample;
 6
 7 namespace  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是这样简单。

 

 

        出自  http://www.cnblogs.com/game-over/archive/2007/10/08/917470.html

  • 0
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值