Remoting in .NET Using C#

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()方法來獲得。而這個方法正是在客戶端調用的。因此 它的實現方式就等同於客戶端激活模式。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章