C# Remoting的一个简单例子
2008-09-26 11:02
471 查看
C# Remoting的一个简单例子
2007-10-26 09:07
2007-10-26 09:07
.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 ![]() } 9 ![]() 10 ![]() 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 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端: 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 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 ![]() } |
相关文章推荐
- C# Remoting的一个简单例子
- C# Remoting的一个简单例子
- C# Remoting的一个简单例子
- C# Remoting的一个简单例子
- C# Remoting的一个简单例子
- C# Remoting的一个简单例子
- C#用存储过程的一个简单例子
- c#接口简单易懂的一个例子
- c#学习笔记之九 事件(event)的使用,一个简单的例子揭示其设计理念
- c#中子线程控制进度条的一个简单例子
- c#中子线程控制进度条的一个简单例子(多线程问题)
- c#中子线程控制进度条的一个简单例子
- c#打包文件解压缩 C#中使用委托、接口、匿名方法、泛型委托实现加减乘除算法 一个简单例子理解C#的协变和逆变 对于过长字符串的大小比对
- 一个简单的C#多线程间同步的例子
- 一个极其简单的在线C#IDE例子
- 一个简单的C#多线程间同步的例子
- 一个简单例子理解C#的协变和逆变
- 用c#进行directX开发的一个简单例子
- 一个简单的C#多线程间同步的例子
- 转一个简单的C#多线程间同步的例子