.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用的對象:
2
{3
public class RemoteObject : System.MarshalByRefObject4
{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端:
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端:
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是這樣簡單。
