亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

初識(shí)用.NET Remoting來(lái)開(kāi)發(fā)分布式應(yīng)用

系統(tǒng) 1525 0

一. .NET Remoting 簡(jiǎn)介:

.NET Remoting 從某種意義上講是 DCOM 的替代品。 ASP.NET Web 服務(wù)十分有用,但是這項(xiàng)技術(shù)在企業(yè)內(nèi)聯(lián)網(wǎng)的解決方案中,對(duì)于某些業(yè)務(wù)請(qǐng)求來(lái)說(shuō)并不快,也沒(méi)有足夠的靈活性,而且, ASP.NET Web 服務(wù)需要有運(yùn)行時(shí)的支持。使用 .NET Remoting 技術(shù)后,可以將 Web 服務(wù)提供給世界上的任何地方。而且可以在所有的應(yīng)用程序類(lèi)型中運(yùn)行 Web 服務(wù)。

二. .NET Remoting 的基本原理:

體系結(jié)構(gòu)圖如下:

初識(shí)用.NET Remoting來(lái)開(kāi)發(fā)分布式應(yīng)用

三.幾個(gè)重要的概念:

1 .遠(yuǎn)程對(duì)象:

遠(yuǎn)程對(duì)象類(lèi)是從 MarshalByRefObject 類(lèi)中派生的??缭綉?yīng)用程序域調(diào)用這個(gè)類(lèi)需要使用代理。 .NET Remoting 支持兩種類(lèi)型的遠(yuǎn)程對(duì)象:知名的( Well-known )遠(yuǎn)程對(duì)象和客戶激活( Client-activated )遠(yuǎn)程對(duì)象。遠(yuǎn)程對(duì)象其實(shí)包括兩層含義:

操作遠(yuǎn)程對(duì)象:對(duì)象運(yùn)行在遠(yuǎn)程,客戶段向他發(fā)送消息;

傳遞遠(yuǎn)程對(duì)象:將遠(yuǎn)程對(duì)象拿到本地,或者將本地對(duì)象發(fā)送過(guò)去,對(duì)副本進(jìn)行操作。

2 .激活:

使用 new 運(yùn)算符可以激活遠(yuǎn)程對(duì)象。還有其它一些方式也可以激活遠(yuǎn)程對(duì)象,在以后的隨筆里面我會(huì)介紹。

3 .通道:

一個(gè)遠(yuǎn)程對(duì)象使用通道發(fā)送和接收消息。服務(wù)器選擇一個(gè)通道來(lái)監(jiān)聽(tīng)請(qǐng)求,客戶端選擇通道來(lái)和服務(wù)器通訊。 Remoting 提供了內(nèi)置的通道: TCP 通道和 HTTP 通道,我們也可以編寫(xiě)自己的通道。

4 .編組:

數(shù)組通過(guò)應(yīng)用程序域被傳遞的過(guò)程稱為編組。將變量作為遠(yuǎn)程對(duì)象的參數(shù)來(lái)發(fā)送時(shí),這個(gè)變量必須被轉(zhuǎn)換,以便能夠通過(guò)應(yīng)用程序域發(fā)送該變量。

5 .監(jiān)聽(tīng):

使用監(jiān)聽(tīng),能夠?qū)⒛承┕δ苤萌氲椒椒ㄕ{(diào)用鏈中。如果調(diào)用某個(gè)對(duì)象的方法,監(jiān)聽(tīng)層便能夠捕獲調(diào)用來(lái)轉(zhuǎn)換方法調(diào)用,或是完成某些日志記錄。 .NET Remoting 調(diào)用鏈的每一部分都是用監(jiān)聽(tīng)。

四.開(kāi)發(fā) Remoting 三步走:

開(kāi)發(fā) .NET Remoting 分三步走,在這里以一個(gè)簡(jiǎn)單的例子來(lái)說(shuō)明。

1 .創(chuàng)建遠(yuǎn)程對(duì)象:

繼承 System.MarshalByRefObject

1 using System;
2 using System.Collections;
3 using System.Text;
4
5 namespace SimpleRemoting
6 {
7 public class HelloServer:MarshalByRefObject
8 {
9 public HelloServer()
10 {
11 /**/ /// 輸出信息,服務(wù)器激活
12 Console.WriteLine( " 服務(wù)器激活…… " );
13 }

14 public StringHelloMethod(Stringname)
15 {
16 Console.WriteLine(
17 " 服務(wù)器端:{0} " ,name);
18 return " 這里是: " + name;
19 }

20 }

21 }


2.創(chuàng)建宿主應(yīng)用程序:

注冊(cè)通道

注冊(cè)服務(wù)器激活的遠(yuǎn)程對(duì)象

運(yùn)行宿主程序

1 using System;
2 using System.Net;
3 using System.Runtime.Remoting;
4 using System.Runtime.Remoting.Channels;
5 using System.Runtime.Remoting.Channels.Tcp;
6 using System.Runtime.Remoting.Channels.Http;
7
8 namespace SimpleRemoting
9 {
10
11 public class Server
12 {
13 public static int Main( string []args)
14 {
15
16 /**/ /// 創(chuàng)建Tcp通道
17 TcpChannelchan1 = new TcpChannel( 8085 );
18
19 /**/ /// 創(chuàng)建Http通道
20 HttpChannelchan2 = new HttpChannel( 8086 );
21
22 /**/ /// 注冊(cè)通道
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.建立客戶端程序:

注冊(cè)通道

根據(jù) URL 得到對(duì)象代理

使用代理調(diào)用遠(yuǎn)程對(duì)象

1 using System;
2 using System.Runtime.Remoting;
3 using System.Runtime.Remoting.Channels;
4 using System.Runtime.Remoting.Channels.Tcp;
5 using System.Runtime.Remoting.Channels.Http;
6 using System.IO;
7
8 namespace SimpleRemoting
9 {
10 public class Client
11 {
12 public static void Main( string []args)
13 {
14 /**/ /// 使用TCP通道得到遠(yuǎn)程對(duì)象
15 TcpChannelchan1 = new TcpChannel();
16 ChannelServices.RegisterChannel(chan1);
17
18 HelloServerobj1 = (HelloServer)Activator.GetObject(
19 typeof (SimpleRemoting.HelloServer),
20 " tcp://localhost:8085/SayHello " );
21
22 if (obj1 == null )
23 {
24 System.Console.WriteLine(
25 " 連接TCP服務(wù)器失敗 " );
26 }

27
28 /**/ /// 使用HTTP通道得到遠(yuǎn)程對(duì)象
29 HttpChannelchan2 = new HttpChannel();
30 ChannelServices.RegisterChannel(chan2);
31
32 HelloServerobj2 = (HelloServer)Activator.GetObject(
33 typeof (SimpleRemoting.HelloServer),
34 " http://localhost:8086/SayHello " );
35
36 if (obj2 == null )
37 {
38 System.Console.WriteLine(
39 " 連接HTTP服務(wù)器失敗 " );
40 }

41
42 /**/ /// 輸出信息
43 Console.WriteLine(
44 " ClientTCPHelloMethod{0} " ,
45 obj1.HelloMethod( " Caveman1 " ));
46 Console.WriteLine(
47 " ClientHTTPHelloMethod{0} " ,
48 obj2.HelloMethod( " Caveman2 " ));
49 Console.ReadLine();
50 }

51 }

52 }

53

初識(shí)用.NET Remoting來(lái)開(kāi)發(fā)分布式應(yīng)用


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦?。?!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 中文字幕日韩欧美 | 狠狠躁夜夜躁人人爽天天3 狠狠躁夜夜躁人人爽天天miya | 全部毛片免费看 | 国产精品视频久久 | 五月婷婷六月激情 | 九九这里只有精品 | 亚洲国产欧美国产第一区二区三区 | 国产成人久久精品一区二区三区 | 深夜视频在线免费观看 | 欧美日韩亚洲在线观看 | 色狠狠一区二区三区香蕉蜜桃 | 亚洲精品国产第一区二区多人 | 国产精品福利在线观看入口 | 亚洲美女在线播放 | 国产成人v片视频在线观看 国产成人爱片免费观看视频 | 国产亚洲欧美久久精品 | 青草青视频在线观看 | 亚洲欧美日韩一区超高清 | 免费久久久久 | 国产精品永久免费视频观看 | 国产精品久久久久999 | 国产精品福利在线观看入口 | 天天夜碰日日摸日日澡 | 国产不卡精品一区二区三区 | 爱做久久久久久久久久 | 国产精品久久毛片蜜月 | 80岁老妇xxxxx高清 | 日本一片免费观看高清完整 | 99久久精品无码一区二区毛片 | www.中文字幕.com | 国产精品亚洲精品 | 青青青草视频在线观看 | 日韩亚射吧 | h片在线 | 成人性色生活片免费看爆迷你毛片 | 欧美视频一区二区三区 | 久久国产这里只有精品 | 天天搞夜夜 | 亚洲高清在线观看播放 | 国产日韩高清一区二区三区 | 精品国产线拍大陆久久尤物 |