2008年11月12日 星期三

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

在寫應用程式時,常常需要實作一些存取Server資料庫的行為
有時候我們會從ClientAP直接連接到Server的資料庫去作存取的動作

可是這麼作似乎有些安全性的考量,因此我們希望能夠透過一支中介的程式才幫我們做資料庫的存取,這時候使用 .Net Remoting 可以是一個簡單的解決方式。

程式的原始檔,總共分為4個。其中,Client端 與 Server端各占兩個。

在Server端的部分需要如下的檔案:

Remote.cs

using System;
using System.Data;
using MySql.Data.MySqlClient;

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

 public class RemoteObject : MarshalByRefObject, IRemoteObject
 {
  #region IRemoteObject 成員

  bool IRemoteObject.Login(string account, string password)
  {
   //方法的實作
   //return true or false
   .
   .
   .   
  }
  
  #endregion
 }
}

這檔案中實作Login方法的地方並不是重點,
重點是我們宣告了一個 IRemoteObject 並且實作它。
實做出來的類別必須繼承 MarshalByRefObject

Server端的第2個檔案
Server.cs

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

namespace Server
{
 public class CServer
 {
  private TcpChannel channel = null;

  public void StartService()
  {
   try
   {
    //先建立一個通道。7181是port 可以隨便打
    channel = new TcpChannel(7181);
    //跟系統註冊此通道
    ChannelServices.RegisterChannel(channel);
    //跟系統註冊RemoteObject,及RemoteObject的路徑是ServiceMessage
    RemotingConfiguration.RegisterWellKnownServiceType(typeof(RemoteObject), "ServiceMessage", WellKnownObjectMode.SingleCall);
   }
   catch
   {
    MessageBox.Show("無法啟動服務");
    ChannelServices.UnregisterChannel(channel);
   }
  }
 }
}


沒有留言:

張貼留言