凯锐

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

Remoting的優缺點?

優點:

1、能方便的構建大范圍分布式應用程序

2Tcp通道的Remoting速度非常快

3、雖然是遠端的,但是非常接近於本地調用物件

4、可以做到保持物件的狀態

5、沒有應用程式限制,可以是控制臺,winformiiswindows服務承載遠端物件

缺點:

1、非標準的應用因此有平臺限制

2、脫離iis的話需要有自己的安全機制

Remoting的開發三步曲

1  創建遠程對象:此物件要繼承MarshalByRefObject

2  創建一個“宿主”程序,接受客戶請求:註冊通道、註冊服務器啟動的遠端對象(SingletonSingleCall

3  創建用戶端調用遠端對象:註冊通道,根據URL獲得代理,通過代理獲得對象

Remoting的開發實例(Reomoting 實現信息發送功能)

      1﹑建立類別庫專案﹐RemoteObject,輸入以下代碼﹕

 public class RemoteObject:MarshalByRefObject 
    {
        
public RemoteObject() { }
        
public static void Bullet(String str)
        {
            MessageBox.Show(str, 
"Remoting Message", MessageBoxButtons.OK);
        }
    }

 只有直接或間接的繼承 MarshalByRefObject 的類才能被遠程激活

            2﹑建立一WinForm服務器端程序專案﹐以接受用戶請求。

A﹑進行相關屬性設置﹐將Form1改為frmServer

B﹑點擊該專案新增一個應用程序組態檔App.Config.該文件是一個標准的XML文件格式﹐輸入以下代碼﹕

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    
<system.runtime.remoting>
        
<application name ="RemoteServer">
            
<service>
                
<activated type="RemoteObject.RemoteObject,RemoteObject"/>
            
</service>
            
<channels>
                
<channel ref="tcp server" port="8080"/>
            
</channels>
        
</application>
    
</system.runtime.remoting>
</configuration>

              C﹑在frmServer中引用命名空間

using System.Runtime.Remoting;

            在建構方法中加入以下一句﹕

RemotingConfiguration.Configure("RemoteServer.exe.config", false);

        3新建立一WinForm客戶端程序專案﹐能調用遠程對象

A﹑進行相關屬性設置﹐將Form1改為frmClient

B﹑在工具箱中拖一個label進來﹐將text屬性改為Enter Message,Name屬性設為lblMessage,拖一textbox,name設為tbxMessage,再拖buttons,namebtnSend,text設為Send

C﹑點擊該專案新增一個應用程序組態檔App.Config.輸入以下代碼﹕

<?xml version="1.0" encoding="utf-8" ?>
<configuration>    
    
<system.runtime.remoting>
        
<application name="RemoteClient">
            
<client url="tcp://localhost:8080/RemoteServer">
                
<activated type="RemoteObject.RemoteObject,RemoteObject"/>
            
</client>
            
<channels>
                
<channel ref="tcp client"/>
            
</channels>
        
</application>
    
</system.runtime.remoting>
</configuration>

                D﹑雙擊窗體的空白部分﹐在Load中輸入代碼﹐btnSend上雙擊輪入代碼﹐整個代碼如下﹕

private void frmClient_Load(object sender, EventArgs e)
        {
            
//Listen the Client request,config the client infomation
            RemotingConfiguration.Configure("RemoteClient.exe.config"false);
        }

        
private void btnSend_Click(object sender, EventArgs e)
        {
            RemoteObject.RemoteObject.Bullet(
this.tbxMessage.Text);
        }

 

        4﹑其實應該不能算一步了。如果這時你編譯以上的專案﹐在client端肯定會報錯﹐原因很簡單:缺少引用。沒錯﹐這一步就是在client端和server端加入遠程對象類的引用。

        5﹑編譯整個方案﹐先運行server端一個實例﹐再運行client端的實例﹐在窗體的textbox中輸入文字﹐就將彈出你輸入的文字的MessageBox啦。測試OK

        6﹑本Remoting Source現提供下載﹗(注﹕本人也是初學Remoting,歡迎交流討論.QQ:52433739)﹐本文參考了LoveCherry<<一步一步學Remoting>>


posted on 2006-09-26 12:46  凯锐  阅读(963)  评论(2编辑  收藏  举报