代码之家  ›  专栏  ›  技术社区  ›  mafu

.NET远程调用回调

  •  4
  • mafu  · 技术社区  · 16 年前

    是否可以通过远程传输回调?我想做一些类似的事情 myRemoteObject.PerformStuff( x => Console.WriteLine(x) );

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

    编辑:

    3 回复  |  直到 16 年前
        1
  •  3
  •   Andrew Shepherd    15 年前

    重要的是,您需要注册双工信道,而不仅仅是服务器或客户端。

    例如,TcpChannel/HttpChannel/IpcChannel和NOT TcpServerChannel/TcpClientChannel等。

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

        2
  •  5
  •   Vlad P.    13 年前

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

    此外,您可以将回调接口传递给远程类,前提是该接口的实现是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);
             }
         }
    
    }
    
        3
  •  -1
  •   RichardOD    16 年前

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