[Mono-dev] Remoting Server Events problem

Robert Jordan robertj at gmx.net
Sun Nov 25 06:57:27 EST 2007

buhochileno at gmail.com wrote:
> Hi:
> I know that is very possible that this is a basic remoting question, but 
> I read some info about the native .NET approach used with remoting and I 
> think that my code is supose it to work:
> I write a class with a method to trigger some event (this is the object 
> resgitered by the remoting server):
> [Serializable]
> public class Camera: MarshalByRefObject
> ...
>    public void SetZoom(int amount)
>    {...//zoom code
>        SomeDelegate h = this.SomeEvent; //some test event triger, the 
> SomeDelegate is public...
>        if ((h != null) && (SomeEvent != null))
>                h (this, new EventArgs());
>        else
>                Console.WriteLine("null then?"); //allways is null
>       }
> ...On the client side I use a special "RemoteCamera", this class deal 
> with all the remoting stuff related to get the object from the 
> server...something like:
> [Serializable]
> public class RemoteCamera: MarshalByRefObject
>        public RemoteOrbitKit()
>        { .../channel registration, etc...
> camera(ICamerat)Activator.GetObject(typeof(ICamera),_fullObjectURLPath); 
> //....
>            camera.SomeEvent += new SomeDelegate(SomeMethod);
>             ...
>             camera.SetZoom(50); //this work, but the event is not 
> triggered...
>        }
>        public SomeMethod(object sender, EventArgs e)
>        {
>             Console.WriteLine("method called"); //This methis is never 
> called becouse the Event/method asociation allways is null
>        }
> Do you see what is my mistake?
> sugestions?, ideas?

1. The server must know the type "RemoteCamera", because the delegate
    is containing a reference to an instance of this class.

    You can circumvent this by using a public static method as
    an event handler.

2. The client must start a listener as well. This is done with
    "new TcpChannel (0)" or "new HttpChannel (0)" or with a
    corresponding remoting configuration setting.

3. The client must not be firewalled because it is
    called back by the server.


More information about the Mono-devel-list mailing list