4

Is it possible to transmit a callback via remoting? I'd like to do something along the lines of myRemoteObject.PerformStuff( x => Console.WriteLine(x) );

If not, how would I implement a equivalent functionality?

Edit: I'm aware Remoting got superseded by WCF, but I'm still interested in this specific case. (Out of curiosity though, how's the issue in WCF?)

mafu
  • 31,798
  • 42
  • 154
  • 247

3 Answers3

5

Important to add that you need to register duplex channels, not just a server or a client. Otherwise the callback will not work.

E.g. TcpChannel/HttpChannel/IpcChannel and NOT TcpServerChannel/TcpClientChannel and so on.

For firewalled solutions make sure that the callback port is opened on the 'client' for both TCP and HTTP channels (IPC does not use ports).

Vlad P.
  • 99
  • 2
  • 3
3

Remoting provides support for events. The client code can simply subscribe to an event that's exposed by the server class. (There are a large list of caveats here).

Also, you can pass a callback interface to a remote class, providing your implementation of the interface is a MarshalByRef object.

interface IMyCallback
{
      void OnSomethingHappened(string information);
}


class MyCallbackImplementation : MarshalByRefObject, IMyCallback
{
    public void OnSomethingHappened(string information)
    {
        // ...
    }

}



class MyServerImplementation : MarshalByRefObject
{
     List<IMyCallback> _callbacks = new List<IMyCallback>();

     public void RegisterCallback(IMyCallback _callback)
     {
           _callbacks.Add(_callback);
     }

     public void InvokeCalbacks(string information)
     {
         foreach(IMyCallback callback in _callbacks)
         {
              _callback.OnSomethingHappened(information);
         }
     }

}
Andrew Shepherd
  • 44,254
  • 30
  • 139
  • 205
-1

In WCF you use callback operations. If you can use WCF or remoting, choose WCF. Remoting is classed as legacy.

RichardOD
  • 28,883
  • 9
  • 61
  • 81