分享
 
 
 

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

王朝c#·作者佚名  2006-11-24
窄屏简体版  字體: |||超大  

一..NET Remoting简介:

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

二..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

1using System;

2using System.Collections;

3using System.Text;

4

5namespace SimpleRemoting

6{

7 public class HelloServer : MarshalByRefObject

8 {

9 public HelloServer()

10 {

11 /**////输出信息,服务器激活

12 Console.WriteLine("服务器激活……");

13 }

14 public String HelloMethod(String name)

15 {

16 Console.WriteLine(

17 "服务器端 : {0}", name);

18 return "这里是:" + name;

19 }

20 }

21}

2.创建宿主应用程序:

注册通道

注册服务器激活的远程对象

运行宿主程序

1using System;

2using System.Net;

3using System.Runtime.Remoting;

4using System.Runtime.Remoting.Channels;

5using System.Runtime.Remoting.Channels.Tcp;

6using System.Runtime.Remoting.Channels.Http;

7

8namespace SimpleRemoting

9{

10

11 public class Server

12 {

13 public static int Main(string [] args)

14 {

15

16 /**////创建Tcp通道

17 TcpChannel chan1 = new TcpChannel(8085);

18

19 /**////创建Http通道

20 HttpChannel chan2 = new HttpChannel(8086);

21

22 /**////注册通道

23 ChannelServices.RegisterChannel(chan1);

24 ChannelServices.RegisterChannel(chan2);

25

26 RemotingConfiguration.RegisterWellKnownServiceType

27 (

28 typeof(HelloServer),

29 "SayHello",

30 WellKnownObjectMode.Singleton

31 );

32

33

34 System.Console.WriteLine("按任意键退出!");

35 /**////下面这行不能少

36 System.Console.ReadLine();

37 return 0;

38 }

39

40 }

41}

42

43

3.建立客户端程序:

注册通道

根据URL得到对象代理

使用代理调用远程对象

1using System;

2using System.Runtime.Remoting;

3using System.Runtime.Remoting.Channels;

4using System.Runtime.Remoting.Channels.Tcp;

5using System.Runtime.Remoting.Channels.Http;

6using System.IO;

7

8namespace SimpleRemoting

9{

10 public class Client

11 {

12 public static void Main(string[] args)

13 {

14 /**////使用TCP通道得到远程对象

15 TcpChannel chan1 = new TcpChannel();

16 ChannelServices.RegisterChannel(chan1);

17

18 HelloServer obj1 = (HelloServer)Activator.GetObject(

19 typeof(SimpleRemoting.HelloServer),

20 "tcp://localhost:8085/SayHello");

21

22 if (obj1 == null)

23 {

24 System.Console.WriteLine(

25 "连接TCP服务器失败");

26 }

27

28 /**////使用HTTP通道得到远程对象

29 HttpChannel chan2 = new HttpChannel();

30 ChannelServices.RegisterChannel(chan2);

31

32 HelloServer obj2 = (HelloServer)Activator.GetObject(

33 typeof(SimpleRemoting.HelloServer),

34 "http://localhost:8086/SayHello");

35

36 if (obj2 == null)

37 {

38 System.Console.WriteLine(

39 "连接HTTP服务器失败");

40 }

41

42 /**////输出信息

43 Console.WriteLine(

44 "ClientTCP HelloMethod {0}",

45 obj1.HelloMethod("Caveman1"));

46 Console.WriteLine(

47 "ClientHTTP HelloMethod {0}",

48 obj2.HelloMethod("Caveman2"));

49 Console.ReadLine();

50 }

51 }

52}

53

结束语:

初识用.NET Remoting来开发分布式应用就到这里了,有时间我会就.NET Remoting技术写成系列文章。包括基于租约的生存期,编组,异步远程调用等等。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有