Create a Remotable Object
Create a Server To Expose the Remotable Object
Create a Client To Use the Remotable Object
摘自http://www.codeproject.com/KB/IP/cs_remoting.aspx
基於接口方式未測試成功,繼續。。。
我們在服務器端的遠程對象中加上抽象工廠的接口和實現類:
public interface IServerObject
{
Person GetPersonInfo(string name,string sex,int age);
}
public interface IServerObjFactory
{
IServerObject CreateInstance();
}
public class ServerObject:MarshalByRefObject,IServerObject
{
public Person GetPersonInfo(string name,string sex,int age)
{
Person person = new Person();
person.Name = name;
person.Sex = sex;
person.Age = age;
return person;
}
}
public class ServerObjFactory:MarshalByRefObject,IServerObjFactory
{
public IServerObject CreateInstance()
{
return new ServerObject();
}
}
然後再客戶端的遠程對象中只提供工廠接口和原來的對象接口:
public interface IServerObject
{
Person GetPersonInfo(string name,string sex,int age);
}
public interface IServerObjFactory
{
IServerObject CreateInstance();
}
我們用WellKnown激活模式註冊遠程對象,在服務器端:
//傳遞對象;
RemotingConfiguration.RegisterWellKnownServiceType(
typeof(ServerRemoteObject.ServerObjFactory),
"ServiceMessage",WellKnownObjectMode.SingleCall);
注意這裏註冊的不是ServerObject類對象,而是ServerObjFactory類對象。
客戶端:
ServerRemoteObject.IServerObjFactory serverFactory =
(ServerRemoteObject.IServerObjFactory) Activator.GetObject(
typeof(ServerRemoteObject.IServerObjFactory),
"tcp://localhost:8080/ServiceMessage");
ServerRemoteObject.IServerObject serverObj = serverFactory.CreateInstance();
爲什麼說這是一種客戶端激活模式的模擬呢?從激活的方法來看,我們是使用了SingleCall模式來激活對象,但此時激活的並非我們要傳遞的遠程 對象,而是工廠對象。如果客戶端要創建遠程對象,還應該通過工廠對象的CreateInstance()方法來獲得。而這個方法正是在客戶端調用的。因此 它的實現方式就等同於客戶端激活模式。