[Mono-dev] Remoting Server Events problem

buhochileno at gmail.com buhochileno at gmail.com
Mon Nov 26 07:45:10 EST 2007


Thanks Robert I'm trying to follow your code, I need more training with 
generics, so this is a good excersice to :-) ...
Some design sugestions.:
- Do you recomend to have a "remoting server version" of the class that 
you want to use with remoting?
- also a "client remoting version" of the real class?, I mention this, 
becouse in my case if is posible I want  to expose the events, in the 
client side, like traditional cli events, so if I have a remoting client 
version of the class I can deal with the "remoting events" technic that 
you show me and expose the same events but in a traditional cli way, 
that make sense :-S ?

thanks.

Mauricio

Robert Jordan wrote:
> Hi,
>
> buhochileno at gmail.com wrote:
>> Thanks Robert, I very confuse with this, becouse I read a lote of 
>> diferent approach (event broadcast engines, shared objects, etc) to 
>> do this, but most of them don't work :-S ,  I wondore if you have a 
>> simple working example of the correct way to do this?
>
>
> Events only make sense in local cross appdomain contexts.
> Anything else is a world of pain. See
> http://www.thinktecture.com/resourcearchive/net-remoting-faq/remotingusecases 
>
>
> The attached sample is still using events on the server side but
> it requires that clients implement a certain interface that
> was declared in the shared assembly.
>
> The server is using a special "AsyncEvent" that doesn't have the
> drawbacks of a simple CLI event:
>
> - the clients are notified sequentially. This doesn't scale
>
> - if a client doesn't respond, the next clients won't be called
>   back anymore. This is far from being reliable.
>
> AsyncEvent is calling the clients in parallel and it also disconnects
> failing clients. This is still not optimal because it doesn't scale
> at large: Imagine you have 1000 connected clients ...
>
> Robert
>
>>
>> in advance, thank you very much.
>>
>> Mauricio
>>
>> Robert Jordan wrote:
>>> 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.
>>>
>>> Robert
>>>
>>> _______________________________________________
>>> Mono-devel-list mailing list
>>> Mono-devel-list at lists.ximian.com
>>> http://lists.ximian.com/mailman/listinfo/mono-devel-list
>>>
>>>   
>
> ------------------------------------------------------------------------
>
> _______________________________________________
> Mono-devel-list mailing list
> Mono-devel-list at lists.ximian.com
> http://lists.ximian.com/mailman/listinfo/mono-devel-list
>   




More information about the Mono-devel-list mailing list