隨著工業控制技術、計算機網絡和數字通信技術的快速發展,分布式測量、分布式計算和網絡控制在工業生產中將越來越多地被使用。Remoting技術是在.NET環境下,在應用程序內部或應用程序域之間傳輸數據的方案。它有多種可以在數據傳輸中使用的通道,并且,在一個封閉的網絡環境中,選擇TCP通道將獲得更好的連接性能。因此,把.NET Remoting技術運用到工業生產測控通信之中,達到及時通信、實時控制的目的,具有一定的應用價值。 1 Remoting 1.1 Remoting技術簡介 Microsoft.NET Remoting提供了一種允許對象通過應用程序域與另一對象進行交互的框架。這種框架提供了多種服務,包括激活和生存期支持,以及負責與遠程應用程序進行消息傳輸的通信通道。可以通過使用Remoting來進行不同應用程序之間的通信,不管這些程序是在同一臺計算機上,還是在局域網內的不同計算機上,甚至在Internet的不同操作系統上(當然相應的操作系統也必須實現.Net Framework)。Remoting將取代DCOM成為應用更為廣泛的一種技術。 1.2 Remoting的體系結鉤 .NET Remoting為分布式對象提供了一個基礎結構。它使用既靈活又可擴展的管線向遠程進程提供.NET的完全對象語義。Remoting體系結構主要包括以下元素:遠程對象、通道、消息、格式化標志符、代理對象、RemotingConfiguration類、ChannelServices類。 圖1簡單地描述了.NET Remoting的結構,客戶端的對象通過公共接口(代理)訪問遠程服務器對象的方法(或結果);對象訪問和結果的傳輸以格式化的形式通過定義的通道進行。 圖1 .NET Remoting體系結構圖 1.3 Remoting技術的優缺點 Remoting技術的優點:能進行分布式開發;TCP通道的Remoting速度非?欤浑m然是遠程的,但是非常接近于本地調用對象;可以做到保持對象的狀態;不受應用程序限制,可以是控制臺、winform、IIS、windows服務承載遠程對象等。 Remoting技術的缺點大體有兩點:非標準的應用,因此,有平臺限制;當脫離IIS時需要有自己的安全機制。 2 工業通信系統中Remoting技術的實現 在PCLevel工業生產遠程測控系統的設計實現中,采用分布式三層結構的程序設計使得企業內部生產控制整體管理軟件的集成得以方便實現。采用Remoting技術在業務處理層與用戶層建立多個通信管道傳輸數據,較好地解決了企業生產的遠程實時監測和控制問題,為建立企業級的快速網絡進行有效的探索。 應用Remofing技術的分布式處理程序,通常包括三部分:遠程對象、服務端、客戶端。圖2給出了PCLevel系統的數據流程?蛻舳送ㄟ^發布命令、請求數據來調用服務器端的對象,完成各種操作。發布命令、請求數據實質上就是服務端訂閱客戶端事件,即由客戶端發送消息,服務端捕捉該消息,然后響應該事件。 圖2 PCLevel系統數據流程示意圖 2.1 建立遠程對象類(PCLClassLibrary.dll) 把遠程對象集中編寫成一個類,便于服務端和客戶端的引用,同時也便于整個系統的修改升級。下面是建立遠程公用類的一個例子: [Serializable] public class SendOrderClass:MarshalByRefObject,SendOrderIntedace { pubhc static event SendOrderEventHandler SendOrderEvent; #region Send actoin to control equIPMent pubic void SendAction(string equipmentIDTemp, string actionTemp,string userlDTemp,int userLoginGradeTemp) { if(SendOrderEvent!=null) { SendOnterEvent(equipmentIDTemp,actionTemp,userlDTemp,userLnginGradeTemp); } } #endregion //遠程對象的生命周期設為無窮大 public override object InitializeLifetimeService() { retum null; } } 2.2 定義遠程對象公共接口 為了方便系統的部署和修改升級,對遠程對象類的引用定義一個公共接口。以后修改遠程對象時,只需要修改或更新遠程對象類即可。遠程對象的公共接口(PCLCommon.d11)定義如下: public delegate void SendOrderEventHandhr(string equipmentlIYremp, string acfionTemp,string userIDTemp, int userLoginGradeTemp); public interface SendOrderInterface { void SendAction(string equipmentlDTemp,string actionTemp, string userlDTemp,int userIJ09inGradeTemp); } 2.3 服務器端的設置 在服務器端引用PCLCommon.dll和PCLCIassLi.brary.dll,定義和設置TCP通信通道,添加接收事件處理方法: TcpChannel tcpChannelTemp 2 new TcpChannel(8090); ChannelServices.RegisterChannel(tcpChannelTemp); RemotingConfiguration.RegisterWellKnownServiceType(typeof(SendOrderClass),”PCLServer—SendOrder”.Well. KnownObjectMode.sillglecall); ///Remofing事件的定義 SendOrderClass.SendOrderEvent+’=new SendOrderEventHandler(OnAcceptedClientOrder); 當服務器端啟動后,程序就偵聽端口8090上的信號,一旦偵聽到就立即引發事件SendOrderEvent,進而執行方法函數OnAcceptedClientOrder,分析命令內容后,調用不同的函數完成相應的操作。 2.4 客戶端的設置 在客戶端只需引用PCLCommon.dll即可。定義和設置TCP通信通道語句如下: TcpChannel tcpChannelTemp 2 new TcpChannel(0); ChannelServices.RegisterChannel(tcpChannelTemp); sendOrder=(SendOrderInterface)Activator.GetObject(typeof(SendOrderInterface),”top://localhost:8090/PCLServerSendOrder”); 就像調用本機服務一樣,客戶端運行后,能夠獲得比較滿意的傳輸速度。 此外,在遠程服務器端和客戶端分別使用配置文件,配置通信信道的建立和注冊,以及遠程對象的注冊,方便將來重新修改信道、發布的類型或升級服務器端遠程處理對象。 3 結束語 在PCLevel系統中,采用.Net Framework的成熟技術.Net Remoting實現了業務規則層和用戶界面層通信,通過抽象類和接口在遠程處理使得客戶端和服務器端實現有效的對象信息傳遞。這樣不僅方便系統的部署,對應用程序的升級也相當方便,不需要修改任何客戶端代碼,只需要在服務器端重新部署新版本的組件即可。同時,不僅保證了數據讀取的速度,而且保證了數據讀取的安全性,在工業生產遠程數據通信實際應用中取得了極大的成功。 |