初识用.NET Remoting来开发分布式应用

一..NET Remoting简介:

.NET Remoting从某种意义上讲是DCOM的替代品。ASP.NET Web服务十分有用,但是这项技术在企业内联网的解决方案中,对于某些业务请求来说并不快,也没有足够的灵活性,而且,ASP.NET Web服务需要有运行时的支持。使用.NET Remoting技术后,可以将Web服务提供给世界上的任何地方。而且可以在所有的应用程序类型中运行Web服务。

二..NET Remoting 的基本原理:

体系结构图如下:

初识用.NET Remoting来开发分布式应用

三.几个重要的概念:

1.远程对象:

远程对象类是从MarshalByRefObject类中派生的。跨越应用程序域调用这个类需要使用代理。.NET Remoting支持两种类型的远程对象:知名的(Well-known)远程对象和客户**(Client-activated)远程对象。远程对象其实包括两层含义:

操作远程对象:对象运行在远程,客户段向他发送消息;

传递远程对象:将远程对象拿到本地,或者将本地对象发送过去,对副本进行操作。

2.**:

使用new运算符可以**远程对象。还有其它一些方式也可以**远程对象,在以后的随笔里面我会介绍。

3.通道:

一个远程对象使用通道发送和接收消息。服务器选择一个通道来监听请求,客户端选择通道来和服务器通讯。Remoting提供了内置的通道:TCP通道和HTTP通道,我们也可以编写自己的通道。

4.编组:

数组通过应用程序域被传递的过程称为编组。将变量作为远程对象的参数来发送时,这个变量必须被转换,以便能够通过应用程序域发送该变量。

5.监听:

使用监听,能够将某些功能置入到方法调用链中。如果调用某个对象的方法,监听层便能够捕获调用来转换方法调用,或是完成某些日志记录。.NET Remoting调用链的每一部分都是用监听。

四.开发Remoting三步走:

开发.NET Remoting分三步走,在这里以一个简单的例子来说明。

1.创建远程对象:

继承System.MarshalByRefObject

1初识用.NET Remoting来开发分布式应用usingSystem;
2初识用.NET Remoting来开发分布式应用usingSystem.Collections;
3初识用.NET Remoting来开发分布式应用usingSystem.Text;
4初识用.NET Remoting来开发分布式应用
5初识用.NET Remoting来开发分布式应用namespaceSimpleRemoting
6初识用.NET Remoting来开发分布式应用初识用.NET Remoting来开发分布式应用初识用.NET Remoting来开发分布式应用{
7初识用.NET Remoting来开发分布式应用publicclassHelloServer:MarshalByRefObject
8初识用.NET Remoting来开发分布式应用初识用.NET Remoting来开发分布式应用初识用.NET Remoting来开发分布式应用{
9初识用.NET Remoting来开发分布式应用publicHelloServer()
10初识用.NET Remoting来开发分布式应用初识用.NET Remoting来开发分布式应用初识用.NET Remoting来开发分布式应用{
11初识用.NET Remoting来开发分布式应用初识用.NET Remoting来开发分布式应用/**////输出信息,服务器**
12初识用.NET Remoting来开发分布式应用Console.WriteLine("服务器**……");
13初识用.NET Remoting来开发分布式应用}

14初识用.NET Remoting来开发分布式应用publicStringHelloMethod(Stringname)
15初识用.NET Remoting来开发分布式应用初识用.NET Remoting来开发分布式应用初识用.NET Remoting来开发分布式应用{
16初识用.NET Remoting来开发分布式应用Console.WriteLine(
17初识用.NET Remoting来开发分布式应用"服务器端:{0}",name);
18初识用.NET Remoting来开发分布式应用return"这里是:"+name;
19初识用.NET Remoting来开发分布式应用}

20初识用.NET Remoting来开发分布式应用}

21初识用.NET Remoting来开发分布式应用}


2.创建宿主应用程序:

注册通道

注册服务器**的远程对象

运行宿主程序

1初识用.NET Remoting来开发分布式应用usingSystem;
2初识用.NET Remoting来开发分布式应用usingSystem.Net;
3初识用.NET Remoting来开发分布式应用usingSystem.Runtime.Remoting;
4初识用.NET Remoting来开发分布式应用usingSystem.Runtime.Remoting.Channels;
5初识用.NET Remoting来开发分布式应用usingSystem.Runtime.Remoting.Channels.Tcp;
6初识用.NET Remoting来开发分布式应用usingSystem.Runtime.Remoting.Channels.Http;
7初识用.NET Remoting来开发分布式应用
8初识用.NET Remoting来开发分布式应用namespaceSimpleRemoting
9初识用.NET Remoting来开发分布式应用初识用.NET Remoting来开发分布式应用初识用.NET Remoting来开发分布式应用{
10初识用.NET Remoting来开发分布式应用
11初识用.NET Remoting来开发分布式应用publicclassServer
12初识用.NET Remoting来开发分布式应用初识用.NET Remoting来开发分布式应用初识用.NET Remoting来开发分布式应用{
13初识用.NET Remoting来开发分布式应用publicstaticintMain(string[]args)
14初识用.NET Remoting来开发分布式应用初识用.NET Remoting来开发分布式应用初识用.NET Remoting来开发分布式应用{
15初识用.NET Remoting来开发分布式应用
16初识用.NET Remoting来开发分布式应用初识用.NET Remoting来开发分布式应用/**////创建Tcp通道
17初识用.NET Remoting来开发分布式应用TcpChannelchan1=newTcpChannel(8085);
18初识用.NET Remoting来开发分布式应用
19初识用.NET Remoting来开发分布式应用初识用.NET Remoting来开发分布式应用/**////创建Http通道
20初识用.NET Remoting来开发分布式应用HttpChannelchan2=newHttpChannel(8086);
21初识用.NET Remoting来开发分布式应用
22初识用.NET Remoting来开发分布式应用初识用.NET Remoting来开发分布式应用/**////注册通道
23初识用.NET Remoting来开发分布式应用ChannelServices.RegisterChannel(chan1);
24初识用.NET Remoting来开发分布式应用ChannelServices.RegisterChannel(chan2);
25初识用.NET Remoting来开发分布式应用
26初识用.NET Remoting来开发分布式应用RemotingConfiguration.RegisterWellKnownServiceType
27初识用.NET Remoting来开发分布式应用(
28初识用.NET Remoting来开发分布式应用typeof(HelloServer),
29初识用.NET Remoting来开发分布式应用"SayHello",
30初识用.NET Remoting来开发分布式应用WellKnownObjectMode.Singleton
31初识用.NET Remoting来开发分布式应用);
32初识用.NET Remoting来开发分布式应用
33初识用.NET Remoting来开发分布式应用
34初识用.NET Remoting来开发分布式应用System.Console.WriteLine("按任意键退出!");
35初识用.NET Remoting来开发分布式应用初识用.NET Remoting来开发分布式应用/**////下面这行不能少
36初识用.NET Remoting来开发分布式应用System.Console.ReadLine();
37初识用.NET Remoting来开发分布式应用return0;
38初识用.NET Remoting来开发分布式应用}

39初识用.NET Remoting来开发分布式应用
40初识用.NET Remoting来开发分布式应用}

41初识用.NET Remoting来开发分布式应用}

42初识用.NET Remoting来开发分布式应用
43初识用.NET Remoting来开发分布式应用


3.建立客户端程序:

注册通道

根据URL得到对象代理

使用代理调用远程对象

1初识用.NET Remoting来开发分布式应用usingSystem;
2初识用.NET Remoting来开发分布式应用usingSystem.Runtime.Remoting;
3初识用.NET Remoting来开发分布式应用usingSystem.Runtime.Remoting.Channels;
4初识用.NET Remoting来开发分布式应用usingSystem.Runtime.Remoting.Channels.Tcp;
5初识用.NET Remoting来开发分布式应用usingSystem.Runtime.Remoting.Channels.Http;
6初识用.NET Remoting来开发分布式应用usingSystem.IO;
7初识用.NET Remoting来开发分布式应用
8初识用.NET Remoting来开发分布式应用namespaceSimpleRemoting
9初识用.NET Remoting来开发分布式应用初识用.NET Remoting来开发分布式应用初识用.NET Remoting来开发分布式应用{
10初识用.NET Remoting来开发分布式应用publicclassClient
11初识用.NET Remoting来开发分布式应用初识用.NET Remoting来开发分布式应用初识用.NET Remoting来开发分布式应用{
12初识用.NET Remoting来开发分布式应用publicstaticvoidMain(string[]args)
13初识用.NET Remoting来开发分布式应用初识用.NET Remoting来开发分布式应用初识用.NET Remoting来开发分布式应用{
14初识用.NET Remoting来开发分布式应用初识用.NET Remoting来开发分布式应用/**////使用TCP通道得到远程对象
15初识用.NET Remoting来开发分布式应用TcpChannelchan1=newTcpChannel();
16初识用.NET Remoting来开发分布式应用ChannelServices.RegisterChannel(chan1);
17初识用.NET Remoting来开发分布式应用
18初识用.NET Remoting来开发分布式应用HelloServerobj1=(HelloServer)Activator.GetObject(
19初识用.NET Remoting来开发分布式应用typeof(SimpleRemoting.HelloServer),
20初识用.NET Remoting来开发分布式应用"tcp://localhost:8085/SayHello");
21初识用.NET Remoting来开发分布式应用
22初识用.NET Remoting来开发分布式应用if(obj1==null)
23初识用.NET Remoting来开发分布式应用初识用.NET Remoting来开发分布式应用初识用.NET Remoting来开发分布式应用{
24初识用.NET Remoting来开发分布式应用System.Console.WriteLine(
25初识用.NET Remoting来开发分布式应用"连接TCP服务器失败");
26初识用.NET Remoting来开发分布式应用}

27初识用.NET Remoting来开发分布式应用
28初识用.NET Remoting来开发分布式应用初识用.NET Remoting来开发分布式应用/**////使用HTTP通道得到远程对象
29初识用.NET Remoting来开发分布式应用HttpChannelchan2=newHttpChannel();
30初识用.NET Remoting来开发分布式应用ChannelServices.RegisterChannel(chan2);
31初识用.NET Remoting来开发分布式应用
32初识用.NET Remoting来开发分布式应用HelloServerobj2=(HelloServer)Activator.GetObject(
33初识用.NET Remoting来开发分布式应用typeof(SimpleRemoting.HelloServer),
34初识用.NET Remoting来开发分布式应用"http://localhost:8086/SayHello");
35初识用.NET Remoting来开发分布式应用
36初识用.NET Remoting来开发分布式应用if(obj2==null)
37初识用.NET Remoting来开发分布式应用初识用.NET Remoting来开发分布式应用初识用.NET Remoting来开发分布式应用{
38初识用.NET Remoting来开发分布式应用System.Console.WriteLine(
39初识用.NET Remoting来开发分布式应用"连接HTTP服务器失败");
40初识用.NET Remoting来开发分布式应用}

41初识用.NET Remoting来开发分布式应用
42初识用.NET Remoting来开发分布式应用初识用.NET Remoting来开发分布式应用/**////输出信息
43初识用.NET Remoting来开发分布式应用Console.WriteLine(
44初识用.NET Remoting来开发分布式应用"ClientTCPHelloMethod{0}",
45初识用.NET Remoting来开发分布式应用obj1.HelloMethod("Caveman1"));
46初识用.NET Remoting来开发分布式应用Console.WriteLine(
47初识用.NET Remoting来开发分布式应用"ClientHTTPHelloMethod{0}",
48初识用.NET Remoting来开发分布式应用obj2.HelloMethod("Caveman2"));
49初识用.NET Remoting来开发分布式应用Console.ReadLine();
50初识用.NET Remoting来开发分布式应用}

51初识用.NET Remoting来开发分布式应用}

52初识用.NET Remoting来开发分布式应用}

53初识用.NET Remoting来开发分布式应用