.NET Remoting回调

时间:2009-10-15 09:33:24

标签: .net callback remoting

是否可以通过远程传输回传?我想按照myRemoteObject.PerformStuff( x => Console.WriteLine(x) );

的方式做点什么

如果没有,我将如何实现等效功能?

编辑:我知道Remoting被WCF取代了,但我仍然对这个具体案例感兴趣。 (出于好奇,WCF中的问题怎么样?)

3 个答案:

答案 0 :(得分:5)

重要的是要添加您需要注册双工通道,而不仅仅是服务器或客户端。 否则回调将无效。

E.g。 TcpChannel / HttpChannel / IpcChannel和NOT TcpServerChannel / TcpClientChannel等。

对于防火墙解决方案,请确保在“客户端”上为TCP和HTTP通道打开回调端口(IPC不使用端口)。

答案 1 :(得分:3)

远程处理为事件提供支持。客户端代码可以简单地订阅服务器类公开的事件。 (这里有很多警告)。

此外,您可以将回调接口传递给远程类,前提是您的接口实现是MarshalByRef对象。

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 :(得分:-1)

在WCF中,您使用callback operations。如果您可以使用WCF或远程处理,请选择WCF。远程处理被归类为遗产。