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
namespace RemoteSample2
 {
{3
 public class RemoteObject : System.MarshalByRefObject
    public class RemoteObject : System.MarshalByRefObject4
 {
    {5
 public RemoteObject()
        public RemoteObject()6
 {
        {7
 System.Console.WriteLine("New Referance Added!");
            System.Console.WriteLine("New Referance Added!");8
 }
        }9

10
 public int sum(int a, int b)
        public int sum(int a, int b)11
 {
        {12
 return a + b;
            return a + b;13
 }
        }14
 }
    }15
 }
}
	将其编译为一个lib文件:csc /t:library RemoteObject.cs
	
	Server端:
 using System;
using System;2
 using System.Runtime;
using System.Runtime;3
 using System.Runtime.Remoting;
using System.Runtime.Remoting;4
 using System.Runtime.Remoting.Channels;
using System.Runtime.Remoting.Channels;5
 using System.Runtime.Remoting.Channels.Tcp;
using System.Runtime.Remoting.Channels.Tcp;6
 using RemoteSample;
using RemoteSample;7

8
 namespace RemoteSampleServer
namespace RemoteSampleServer9
 {
{10
 public class RemoteServer
    public class RemoteServer11
 {
    {12
 public static void Main(String[] args)
        public static void Main(String[] args)13
 {
        {14
 TcpServerChannel channel = new TcpServerChannel(6666);
             TcpServerChannel channel = new TcpServerChannel(6666);15
 ChannelServices.RegisterChannel(channel);
             ChannelServices.RegisterChannel(channel);16
 RemotingConfiguration.RegisterWellKnownServiceType(typeof(RemoteObject),
             RemotingConfiguration.RegisterWellKnownServiceType(typeof(RemoteObject),17
 "RemoteObject", WellKnownObjectMode.SingleCall);
                 "RemoteObject", WellKnownObjectMode.SingleCall);18
 System.Console.WriteLine("Press Any Key");
             System.Console.WriteLine("Press Any Key");19
 System.Console.ReadLine();
             System.Console.ReadLine();20
 }
         }21
 }
    }22
 }
}(其中RemoteObject是Client和Server端都知道的一种自定义类型),将其编译为一个exe文件:csc /r:System.Runtime.Remoting.dll /r:RemoteObject.dll RemoteServer.cs
	
	Client端:
 using System;
using System;2
 using System.Runtime.Remoting;
using System.Runtime.Remoting;3
 using System.Runtime.Remoting.Channels;
using System.Runtime.Remoting.Channels;4
 using System.Runtime.Remoting.Channels.Tcp;
using System.Runtime.Remoting.Channels.Tcp;5
 using RemoteSample;
using RemoteSample;6

7
 namespace RemoteSampleClient
namespace RemoteSampleClient8
 {
{9
 public class RemoteClient
    public class RemoteClient10
 {
    {11
 public static void Main(string[] args)
        public static void Main(string[] args)12
 {
        {13
 ChannelServices.RegisterChannel(new TcpClientChannel());
            ChannelServices.RegisterChannel(new TcpClientChannel());14
 RemoteObject remoteobj = (RemoteObject)Activator.GetObject(typeof(RemoteObject),
            RemoteObject remoteobj = (RemoteObject)Activator.GetObject(typeof(RemoteObject),15
 "tcp://localhost:6666/RemoteObject");
            "tcp://localhost:6666/RemoteObject");16
 Console.WriteLine("1 + 2 = " + remoteobj.sum(1,2).ToString());
            Console.WriteLine("1 + 2 = " + remoteobj.sum(1,2).ToString());17
 Console.ReadLine();
            Console.ReadLine();18
 }
        }19
 }
    }20
 }
}
	同样的,将其编译为exe文件:csc /r:System.Runtime.Remoting.dll /r:RemoteObject.dll RemoteClient.cs
	
	好了,一次运行生成的RemoteServer.exe和RemoteClient.exe,你就会发现原来Remoting是这样简单。


 
                    