您的位置:首页 > 编程语言 > C#

C# Remoting的一个简单例子

2008-09-26 11:02 471 查看
C# Remoting的一个简单例子
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

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: