.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用的对象: 1 namespace RemoteSample 2 { 3 public class RemoteObject : System.MarshalByRefObject 4 { 5 public RemoteObject() 6 { 7 System.Console.WriteLine("New Referance Added!"); 8 } 910 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 RemoteServer11 { 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 RemoteClient10 { 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是这样简单。From :