<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      回顧.NET Remoting分布式開發

      記得在下第一次接觸.NET Remoting分布式開發是在2003年,那時候是Framework1.0初次亮相之時,Remoting分布式開發是Framework1.0其中一個亮點。經過多年的發展,在2005年,WCF隨著Framework2.0首先亮相。WCF是結合Remoting,Web服務,TCP/IP套接字,MSMQ信息,P2P,WSE等多方通訊的混合體。隨著WCF的出現是否意昧著Remoting即將沒落,答案是否定的。因為Remoting有其獨到之處,在通訊效率,信息交換,安全性等多方面都有其特點,所以在企業內部系統的信息化交換層的開發當中,很多時候會使用Remoting進行開發,在下面幾章為大家回顧一下Remoting的開發。

      一、基礎概念

      Remoting是采用分布式進行編程的一種技術,主要用于管理跨應用程序域的同步和異步RPC 會話。在默認情況下,Remoting可從使用 HTTP 或 TCP 協議進行信息通訊,并使用 XML 編碼的 SOAP 或二進制消息格式進行數據交換。.NET Remoting 提供了非常靈活和可擴展的編程框架,并且可以管理對象的狀態。Remoting跟Web服務不同,它并不依賴于IIS,用戶可以自己開發(Development)并部署(Dispose)宿主服務器,只需要服務器支持Framework。

      二、Remoting的特點

      Remoting可以靈活的定義其所基于的協議,比如http,tcp等。在使用TCP/IP的時候,Remoting能發揮更高的效率,其性能接近于DCOM。

      Remoting一般需要通過一個應用程序或是Windows服務來承載,也可以使用iis部署。

      Remoting必須要在一個支持Framework的開發環境下進行開發,無論客戶端跟服務器端都必須支持Framework。

      Remoting 支持許多狀態管理選項,并且可能與來自同一個用戶的多個調用相關或不相關,這取決于您選擇的對象生命周期架構。

      三、利用Remoting實現分布式開發的優點

      • 容錯性

      容錯性是指一個系統在出現故障時,系統應當能及時恢復。利用Remoting實現分布式應用開發可以建立容錯軟件系統,當某個功能發生錯誤時,不會影響整體系統的工作。使系統能夠及時維護及更新。

      • 可擴展性

      可擴展性是指系統可以利用性能上的遞增處理日益增加的負載量。利用Remoting實現分布式開發,可以將最重要的核心功能模塊放置于性能強大的幾臺主機上,把其他的功能放置于功能稍差的客戶端機上,隨著客戶的增加而加大客戶端主機的服務。這樣做可以減少開發成本,提高主體性能。

      • 易于管理

      一個大型計算機管理系統是非常復雜的,可能涉及的是異地機器之間的代碼調節。利用Remoting實現分布式開發,可以把核心的功能代碼移植到中央服務器,把頁面層,UI層等功能于客戶端實現。這樣系統的性能調節,代碼升級都可以在中央服務器里綜合實現,而忽略對客戶端的影響。

      四、Remoting體系結構

      下面詳細介紹一下Remoting的體系結構,如下圖。

      在客戶發送請求時可以通過Activator.GetObject()和 Activator.CreateInstance()返回一個透明代理對象。實際上透明代理就像一個遠程對象,它執行遠程對象的所有公共方法,這些方法調用真實對象的Invoke()方法,傳送包含方法調用的消息。

      當消息進入Channel通道后,就會經過接收器處理。接收器包含格式接收器、通道接收器和傳輸接收器,其中格式接收器和傳輸接收器是必要的。首先格式接收器會使用SoapFormatter或BinaryFormatter的方式對傳輸的對象進行序列化,如果用戶設定了通道接收器,系統將會對其進行對應處理,最后把信息送到傳輸接收器,對應設定TCP或HTTP傳輸方式加入傳輸接收器頭。當信息發送到服務器,服務器將會根據傳輸接收器頭對信息進行處理,然后在格式化接收器中對信息進行反序列化,最后通過真實代理處理遠程對象。至于“通道接收器”的處理方式,將在后幾章為大家進一步地介紹。


      五、簡單實例

      說了這么多,下面就以一個簡單的例子說明一下Remoting的開發過程吧。

      首先建立一個Model.dll,注意因為對象要進行序列化轉化,必須對其加上Serializable特性!

       

      代碼
      using System;
      using System.Collections.Generic;
      using System.Linq;
      using System.Text;

      namespace Model
      {
      [Serializable]
      publicclass Person
      {
      publicint ID
      {
      get;
      set;
      }

      public String Name
      {
      get;
      set;
      }

      publicint Age
      {
      get;
      set;
      }
      }
      }

      然后建立一個可遠程調用的對象,注意遠程對象必須繼承MarshalByRefObject

      代碼
      using System;
      using System.Collections.Generic;
      using System.Linq;
      using System.Text;
      using System.Runtime.Serialization.Formatters.Binary;
      using System.IO;
      using Model;

      namespace Manager
      {
      //類必須繼承了MarshalByRefObject,才能進行遠程調用
      publicclass PersonManager:MarshalByRefObject
      {
      public List<Person> GetList()
      {
      List
      <Person> personList =new List<Person>();
      FileStream stream
      =new FileStream("DataSource.sour", FileMode.Open, FileAccess.Read); //在服務器文件里面獲取虛擬數據
      BinaryFormatter formatter =new BinaryFormatter();
      personList
      =(List<Person>)formatter.Deserialize(stream); //對虛擬數據進行反序列化獲取集合
      return personList;
      }
      }
      }

      在一個應用程序中加載服務器端,服務器端的配置有兩種試,一是直接寫在代碼里面。首先建立服務傳送方式,可以選擇用TcpServerChannel,也可使用HttpChannel,前者有著更高的效率。然后在ChannelService注冊此傳輸通道,最后通過RemotingConfiguration的RegisterWellKnownServiceType方法注冊遠程對象。

      注意WellKonwnObjectMode可選擇為SingleTon或者SingleCall,前者使用單體模式,每個客戶端進行訪問都會使用同一個遠程對象。后者會為每個請求建立一個遠程對象。在這個例子里面我們使用SingleTon單體模式。

      代碼
      using System.Runtime.Remoting;
      using System.Runtime.Remoting.Channels;
      using System.Runtime.Remoting.Channels.Tcp;
      using Model;
      using Manager;

      namespace Server
      {
      class Program
      {
      staticvoid Main(string[] args)
      {
      //建立服務傳輸方式,可選擇TCP或者HTTP,前者更能發揮高效性
      TcpServerChannel channel =new TcpServerChannel(8089);
      //注冊通道
      ChannelServices.RegisterChannel(channel, false);
      //添加可調用的遠程對象,WellKonwnObjectMode可選擇為SingleTon或者SingleCall
      RemotingConfiguration.RegisterWellKnownServiceType(typeof(PersonManager), "PersonTcp", WellKnownObjectMode.Singleton);
      Console.ReadKey();
      }
      }
      }

      第二,可以在config文件里面實現服務器的配置,其效果與代碼實現的相同。

      config
      <?xml version="1.0" encoding="utf-8" ?>
      <configuration>
      <system.runtime.remoting>
      <application name="Server">
      <service>
      //定義傳送模式,遠程對象類,Uri路徑
      <wellknown mode="Singleton" type="Manager.PersonManager,Manager" objectUri="PersonUri"/>
      </service>
      <channels>
      //定義傳送通道,傳送方式和接口
      <channel ref="tcp" port="8089"/>
      </channels>
      </application>
      </system.runtime.remoting>
      </configuration>

      最后在客戶端對遠程對象進行調用

      代碼
      using System.Runtime.Remoting.Channels;
      using System.Runtime.Remoting.Channels.Tcp;
      using Model;
      using Manager;

      namespace Client
      {
      class Program
      {
      staticvoid Main(string[] args)
      {
      //確立通道傳送方式
      ChannelServices.RegisterChannel(new TcpClientChannel(),false);
      //使用Activator.GetObject()或者Activator.CreateInstance()方法建立透明代理,控制遠程對象
      PersonManager personManager = (PersonManager)Activator.GetObject(typeof(PersonManager), "tcp://localhost:8089/PersonUri");
      //獲取遠程數據
      List<Person> personList = personManager.GetList();
      Console.Write(personList.Count);
      Console.ReadKey();
      }
      }
      }

      六、總結

      上面已經為大家介紹了一個簡單的Remoting開發實例。利用Remoting實現分布式開發,可以對遠程對象的生命周期進行管理,利用HttpChannel,HttpServerChannel,HttpServerTransportSink,HttpClientChannel,HttpClientTransportSinkProvider,HttpClientTransportSink等對象控制服務器端和客戶端的通道,使用代理、消息接收器與通道接收器對信息進行管理,在下面幾章將為各位一一介紹。

      原代碼下載

       

      對 JAVA 開發有興趣的朋友歡迎加入QQ群:174850571 共同探討!
      對 .NET  開發有興趣的朋友歡迎加入QQ群:162338858 共同探討 !

       

      回顧.NET Remoting分布式開發

      學習筆記:JAVA RMI遠程方法調用簡單實例

       

      cnblogs博客園:http://www.rzrgm.cn/leslies2/
      csdn博客:http://blog.csdn.net/leslies2
      原創作品,轉載時請注明作者及出處



      posted on 2011-05-11 10:09  風塵浪子  閱讀(9050)  評論(17)    收藏  舉報

      導航

      主站蜘蛛池模板: 国产精品免费观在线| 亚洲国产午夜精品理论片妓女 | 内射视频福利在线观看| 国产亚洲精品久久综合阿香| 国产真人无码作爱视频免费| 亚洲国产成人综合精品| 久久日韩在线观看视频| 久久综合亚洲鲁鲁九月天| 郴州市| 一级女性全黄久久生活片| 中文字幕乱码一区二区免费| 志丹县| 久人人爽人人爽人人片av| 精品人妻中文字幕在线| 国产做爰xxxⅹ久久久精华液| 成人欧美日韩一区二区三区| 中文字幕亚洲国产精品| 99久久久无码国产精品免费 | 夜夜添无码试看一区二区三区| 国产99青青成人A在线| 性色av免费观看| 色偷偷成人综合亚洲精品| 亚洲人成色99999在线观看| 人妻互换一二三区激情视频| 国产91精品一区二区亚洲| 国产日韩入口一区二区| 国产精品亚洲中文字幕| 亚洲国产精品久久久久婷婷老年| 国产激情一区二区三区四区| 精品国产高清中文字幕| 摸丰满大乳奶水www免费| 国产欧美一区二区精品性色| 亚洲日韩精品无码一区二区三区 | 男女性高爱潮免费网站| 永久免费的av在线电影网| 中文字幕理伦午夜福利片| 亚洲色无码专区一区| 色综合一本到久久亚洲91| 久久亚洲国产精品久久| 略阳县| 好吊视频专区一区二区三区|