原創|其它|編輯:郝浩|2009-07-08 09:29:53.000|閱讀 432 次
概述:Remoting編程基本原理:當客戶端創建遠程RemotableClass的一個實例,.NET框架在客戶端應用程序域中產生一個代理。該代理看起來就像實際對象。代理收到調用后,通過通道連接到遠程的對象。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
一、編寫步驟 編譯: 要將ClockServer.dll拷貝到客戶端。因為創建遠程對象的代理時,.NET框架需要描述Clock類的原數據。它可以從DLL中得到原數據。
第一步 編寫一個DLL,其中包含所要Remottable的類
第二步 服務器進程注冊該remotable 類以便其他應用程序可以激活。根據該對象是如何激活,服務器通過兩種靜態方法來注冊:RegisterActivatedServiceType或者RegisterWellKnownServiceType。下面的語句使用RegisterWellKnownServiceType來注冊RemotableClass,以便遠程激活。
第一個參數是指能遠程化的類。
第二個是指客戶端使用來激活對象的URI----也就是客戶端告訴服務器來激活
RemotableClass實例的URI。
第三個參數指定激活模式。有兩種選擇。WellKnownObjectMode.SingleCall是指為客戶端的每一次調用創建一個新的實例。WellKnownObjectMode.Singleton是指創建一個RemotableClass實例來處理所有客戶端的調用。
第三步 為了使客戶端可以使用RemotableClass,服務器進程必須創建,注冊一個通道。該通道提供對象和遠程客戶端交流的一個渠道。在服務器端,.NET框架提供了兩種通道:
System.Runtime.Remoting.Channels.Tcp.TcpServerChannel:可以接受遠程客戶端的TCP連接。
System.Runtime.Remoting.Channels.Http.HttpServerChannel:接受HTTP連接。
下面的語句創建一個在1234端口監聽的TcpServerChannel通道,并用.NET框架注冊:
TcpServerChannel channel = new TcpServerChannel(1234);
ChannelServices.RegisterChannel(channel);
下面的語句注冊了一個在1234端口監聽的HTTP通道:
HttpServiceChannel channel = new HttpServerChannel(1234);
ChannelServices.RegisterChannel(channel);
TcpServerChannel更有效率一點。HttpServerChannel是使用IIS作為遠程激活代理時使用的選擇。
第四步 在客戶端要想創建遠程類的一個實例,也必須做一些注冊。
第一必須注冊一個客戶端通道。.NET框架提供了兩種類型的客戶端通道:TcpClientChannel和HttpClientChannel,分別和服務器端通道相對應。
第二,如果客戶端想使用new操作符來生產遠程對象,必須將遠程對象注冊到本地應用程序域。
RemotingConfiguration.RegisterWellKnownClientType是在客戶端注冊一個類。
RemotingConfiguration.RegisterWellKnownServiceType是在服務器上注冊一個類。
下面的代碼在客戶端注冊了一個TCP通道,而且也將RemotableClass注冊到本地應用程序域中:
TcpClientChannel channel = new TcpClientChannel();
ChannelServices.RegisterChannel(channel);
RemotingConfiguration.RegisterWellKnownClientType(
Typeof(RemotableClass),
“tcp://localhost:1234/RemoteObject”);
第二個參數是指遠程對象的URL。
協議必須匹配應用程序注冊的通道協議。
可以使用機器名或者IP地址來替換localhost。
端口數必須好服務器端監聽的端口數一樣。
對象URI,必須和服務器用RegisterWellKnownServiceType注冊的匹配。
第五步 在客戶端使用new來產生代理:
RemotableClass rc = new RemotableClass();
這個操作在客戶端應用程序域中產生一個代理,返回RemotableClass的一個引用。
二、實際范例
1. csc /t:library clockserver.cs
2. csc /r:clockserver.dll timeserver.cs
3. csc /r:clockserver.dll timeclient.cs
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉載自:自互聯網