.NET Remoting callback

青春壹個敷衍的年華 提交于 2019-12-23 14:35:15

问题


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?)


回答1:


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);
         }
     }

}



回答2:


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).




回答3:


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



来源:https://stackoverflow.com/questions/1571263/net-remoting-callback

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!