国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

Remoting 的“傳遞的引用”理解

2019-11-17 03:02:26
字體:
供稿:網(wǎng)友

Remoting 的“傳遞的引用”理解

  WCf是集大成者,具有其他微軟的很多技術(shù),其中分布式上很多借助于Remoting,所以研究一下Remoting有助于理解WCF

  提到Remoting就不得不涉及到MarshalByRefObject這個(gè)對象,網(wǎng)絡(luò)上對這個(gè)詞語的解釋非常的模糊不清,特別是說“跨域訪問,Remoting是引用傳遞,不是值傳遞”,而沒有講“引用傳遞”到底是傳的什么東西,有的地方確實(shí)說了通過ObjRef對象 傳遞需要交互的所有內(nèi)容信息,但是更多的是對“引用傳遞”沒有清楚的認(rèn)識(shí),或者說是通過其他方式來理解“引用傳遞”而不是通過“引用傳遞”來更好的理解Remoting,這種邏輯思維方式,特別容易產(chǎn)生囫圇吞棗的模糊概念,看似明白,其實(shí)不明白。

  為了理解引用傳遞,寫了一個(gè)例子,可能有助于理解 代碼

定義Interface

public interface ipersonService    {        String HelloMethod(String name);    }

定義 Implement

public class PersonService : MarshalByRefObject, IPersonService{    public String HelloMethod(String name)    {        Console.WriteLine(            "Server Hello.HelloMethod : {0}", name);        return "Hi there " + name;    }}
定義Service
static void Main(string[] args)        {            //TCP協(xié)議傳輸消息的信道實(shí)現(xiàn)            TcpChannel chan1 = new TcpChannel(8085);            //為遠(yuǎn)程調(diào)用實(shí)現(xiàn)使用HTTP協(xié)議傳輸消息的客戶端通道            HttpChannel chan2 = new HttpChannel(8086);            //提供幫助進(jìn)行遠(yuǎn)程處理信道注冊、解析和URL發(fā)現(xiàn)的靜態(tài)方法。無法繼承此類            ChannelServices.RegisterChannel(chan1, false);            ChannelServices.RegisterChannel(chan2, false);            //提供多種配置遠(yuǎn)程結(jié)構(gòu)的靜態(tài)方法            RemotingConfiguration.RegisterWellKnownServiceType                (               //typeof(HelloServer),               typeof(PersonService),                "SayHello",                WellKnownObjectMode.Singleton                );            System.Console.WriteLine("PRess Enter key to exit");            System.Console.ReadLine();        }
定義Client
class Program    {        static void Main(string[] args)        {            TcpChannel chan1 = new TcpChannel();            ChannelServices.RegisterChannel(chan1,false);            //Activator包含特定的方法,用以在本地或從遠(yuǎn)程創(chuàng)建對象類型、或獲取對現(xiàn)有遠(yuǎn)程對象的引用。無法繼承此類            IPersonService obj1 = (IPersonService)Activator.GetObject(                typeof(IPersonService),// typeof(HelloServer),                "tcp://localhost:8085/SayHello");            if (obj1 == null)            {                System.Console.WriteLine(                    "Could not locate TCP server");            }            //使用HTTP通道得到遠(yuǎn)程對象            HttpChannel chan2 = new HttpChannel();            ChannelServices.RegisterChannel(chan2,false);            IPersonService obj2 = (IPersonService)Activator.GetObject(                typeof(IPersonService),// typeof(HelloServer),                "http://localhost:8086/SayHello");            if (obj2 == null)            {                System.Console.WriteLine(                    "Could not locate HTTP server");            }            Console.WriteLine(                "Client1 TCP HelloMethod {0}",                obj1.HelloMethod("Caveman1"));            Console.WriteLine(                "Client2 HTTP HelloMethod {0}",                obj2.HelloMethod("Caveman2"));            Console.ReadLine();        }    }

注意,客戶端使用的 “IPersonService”接口,對于客戶端來講是不知道接口的實(shí)例類的,

客戶端方法的調(diào)用也只是通過Activator生成的代理對象把調(diào)用的信息、鏈接信息等等進(jìn)行打包,

服務(wù)端接收到打包過來的信息后,根據(jù)打包信息內(nèi)容,對相應(yīng)的類和方法進(jìn)行操作,比如:創(chuàng)建(調(diào)用)服務(wù)實(shí)體,對方法進(jìn)行調(diào)用,把返回值進(jìn)行打包并傳輸給客戶端端,里邊具體的邏輯還需要繼續(xù)研究

這里只想說明一點(diǎn),“Remoting傳輸?shù)囊谩保降资鞘裁匆馑迹獾谜`解。


發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 浦东新区| 新密市| 浏阳市| 莒南县| 泊头市| 三原县| 滦平县| 汝城县| 绥滨县| 太康县| 嘉善县| 资中县| 永登县| 锡林郭勒盟| 湖州市| 盱眙县| 甘德县| 泰安市| 新津县| 班玛县| 富顺县| 怀来县| 沿河| 抚州市| 克山县| 芮城县| 兰州市| 三台县| 武宣县| 邹平县| 绿春县| 淳化县| 千阳县| 兴海县| 若羌县| 静宁县| 汶上县| 元谋县| 桑日县| 门源| 建湖县|