您好,登錄后才能下訂單哦!
如何理解.NET Remoting,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。
.NET Remoting是微軟早期的分布式通信技術,雖然微軟后來通過WCF通用基礎通信框架整合掉了,但是通過回顧學習Remoting,反過來學習理解WCF也是很有幫助的。同時通過這篇博客的學習,可以看到Remoting技術的魅力。
先看一段Wiki百科對于WCF技術的概述。其中就提到了WCF、Web Service、Remoting、Socket等技術。在我提到這些名詞的同時,你應該對這些技術有所了解并清楚這些技術所處于的層次。
Windows Communication Foundation (WCF)是由微軟發(fā)展的一組數(shù)據(jù)通信的應用程序開發(fā)接口,它是.NET框架的一部分,由.NET Framework 3.0開始引入,與Windows Presentation Foundation及 Windows Workflow Foundation并行為新一代Windows操作系統(tǒng)以及WinFX的三個重大應用程序開發(fā)類庫。
在.NET Framework 2.0以及前版本中,微軟發(fā)展了Web Service(SOAP with HTTP communication),.NET Remoting(TCP/HTTP/Pipeline communication)以及基礎的Winsock等通信支持,由于各個通信方法的設計方法不同,而且彼此之間也有相互的重疊性(例如.NET Remoting可以開發(fā)SOAP, HTTP通信),對于開發(fā)人員來說,不同的選擇會有不同的程序設計模型,而且必須要重新學習,讓開發(fā)人員在用戶有許多不便。同時,服務導向架構(Service-Oriented Architecture)也開始盛行于軟件工業(yè)中,因此微軟重新查看了這些通信方法,并設計了一個統(tǒng)一的程序開發(fā)模型,對于數(shù)據(jù)通信提供了最基本最有彈性的支持,這就是Windows Communication Foundation。
其實在早期,還有一些其它的通信技術,比如:MSMQ(消息隊列)、COM、COM+、DCOM等。COM是微軟的重大發(fā)明,將復雜的通信細節(jié)封裝到一個一個的COM組件中,讓.NET程序員可以不用關心復雜的通信細節(jié),只用操作通信模型就可以實現(xiàn)交互操作。
簡單介紹就到這,回過頭來看看Remoting的通信架構圖:
從架構圖可以看到,Remoting可以以對象代理的方式直接操作服務器端的對象的方法。
下面建一個最基本的項目來演示一下Remoting的使用。
先看一下項目的架構:
RemotingServer是一個Remoting服務端控制臺項目;RemotingClient是一個Remoting客戶端控制臺項目;RemotingService是一個類庫項目。
RemotingServer和RemotingClient都需要引用System.Runtime.Remoting這個組件。并且引用RemotingService這個類庫項目。
RemotingServer中的代碼:
static void Main(string[] args) { TcpServerChannel channel = new TcpServerChannel(8888); ChannelServices.RegisterChannel(channel, false); RemotingConfiguration.RegisterWellKnownServiceType(typeof(PersonIDConverter), "Hi", WellKnownObjectMode.SingleCall); Console.WriteLine("Remoting服務已經(jīng)啟動"); Console.ReadLine(); }
RemotingClient中的代碼:
static void Main(string[] args) { ChannelServices.RegisterChannel(new TcpClientChannel(), false); PersonIDConverter service = (PersonIDConverter)Activator.GetObject(typeof(PersonIDConverter), "tcp://localhost:8888/Hi"); if (!object.Equals(service, null)) { Console.WriteLine(service.PersonID15To18("130503670401001"));//測試×××號 } Console.ReadLine(); }
PersonIDConverter中的代碼:
/// <summary> /// 遠程服務類,繼承自MarshalByRefObject /// </summary> public class PersonIDConverter : MarshalByRefObject { /// <summary> /// ×××ID 15轉18位 /// </summary> /// <param name="id">15位×××號</param> /// <returns>18位×××號</returns> public string PersonID15To18(string id) { int iS = 0; int[] iW = new int[] { 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2 };//加權因子常數(shù) string LastCode = "10X98765432";//校驗碼常數(shù) string newId;//新×××號 newId = id.Substring(0, 6); newId += "19";//填在第6位及第7位上填上‘1’,‘9’兩個數(shù)字 newId += id.Substring(6, 9); //進行加權求和 for (int i = 0; i < 17; i++) { iS += int.Parse(newId.Substring(i, 1)) * iW[i]; } int iY = iS % 11; //取模運算,得到模值 newId += LastCode.Substring(iY, 1);//從LastCode中取得以模為索引號的值,加到×××的最后一位,即為新×××號。 return newId; } }
這里面提供了一個×××15位轉18位的服務。
運行時先啟動RemotingServer項目,然后運行RemotingClient項目。
服務端運行后:
客戶端運行后:
可以看到15位×××號成功轉為了18位,Remoting調(diào)用成功。
看完上述內(nèi)容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業(yè)資訊頻道,感謝您對億速云的支持。
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。