2008年11月12日 星期三

簡單的 .NET Remoting 使用範例 (2)

當Server的服務完成之後,接下來就是Client的部分
Client也分成兩個檔案,為:Remote.cs 及 Client.cs

Remote.cs

namespace Remote
{
  interface IRemoteObject
  {
    bool Login(string account, string password);
   }
}

這裡Client端的Remote.cs 與 Server端的Remote.cs 最大的差別就是
,Client端的Remote.cs 只需要 IRemoteObject 而不需要實作,
這也表示Client端不會知道Server端是如何實作IRemoteObject 所宣告的功能
,而我們要的安全性也就達成了。

有一個必須要注意的地方,就是Client端與Server端的IRemoteObjectnamespace命名必須相同

Client.cs

using Remote;
using System.Runtime.Remoting;
using System.Runtime.Remoting.Channels;
using System.Runtime.Remoting.Channels.Tcp;

namespace Client
{
 public class CClient
 {
  private string serverIP = "192.168.1.100"; //Server的IP

  public void Test()
  {
   TcpChannel channel = new TcpChannel(); //建立通道但不指定port

   try
   {
    //註冊通道,系統會自動找未使用的port
    ChannelServices.RegisterChannel(channel, false);
    //經由"tcp://192.168.1.100:7181/ServiceMessage"
    //從Server端實做一個IRemoteObject型態的物件
    IRemoteObject remoteObj = (IRemoteObject)Activator.GetObject(typeof(IRemoteObject), string.Format("tcp://{0}:7181/ServiceMessage", serverIP));

    //物件建立完成後,就可像一般物件一樣使用
    if(remoteObj.Login("root","1234")
     MessageBox.Show("登入成功");
    else
     MessageBox.Show("登入失敗");
   }
   catch
   {
    MessageBox.Show("無法與伺服器建立連線");
   }
   finally
   {
    ChannelServices.UnregisterChannel(channel);
   }
  }  
 }
}

當4個檔案都建立完成後,我們可以經由
Server 的 StartService() 方法來啟動服務
而使用 Client 的 Test() 方法來測試

沒有留言:

張貼留言