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


{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
}
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
RemoteSampleServer9

{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
}
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
RemoteSampleClient8

{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是这样简单。
出自 http://www.cnblogs.com/game-over/archive/2007/10/08/917470.html
本文介绍了一个简单的 C# Remoting 示例,演示了如何通过 TCP 实现远程对象的创建和服务注册,以及客户端如何调用这些远程服务。
1065





