.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端:
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是这样简单。
 posted on 2009-01-07 17:55  lasko  阅读(337)  评论(0编辑  收藏  举报