當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端的IRemoteObject的namespace命名必須相同。
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() 方法來測試
沒有留言:
張貼留言