初識用.NET Remoting來開發分佈式應用

初識用.NET Remoting來開發分佈式應用

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

 

註冊通道

註冊服務器激活的遠程對象

運行宿主程序

 

註冊通道

根據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
.建立客戶端程序:
.創建宿主應用程序:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章