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

.NET远程处理回调

  •  3
  • mafu  · 技术社区  · 15 年前

    是否可以通过远程处理发送回拨?我想做点事情 myRemoteObject.PerformStuff( x => Console.WriteLine(x) );

    如果不是,我如何实现等效功能?

    编辑: 我知道远程处理已经被WCF取代了,但我仍然对这个特定的案例感兴趣。(出于好奇,WCF的问题如何?)

    3 回复  |  直到 12 年前
        1
  •  3
  •   Andrew Shepherd    14 年前

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

    此外,还可以将回调接口传递给远程类,前提是该接口的实现是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
  •  5
  •   Vlad P.    12 年前

    重要的是,您需要注册双工通道,而不仅仅是服务器或客户机。 否则回调将不起作用。

    例如tcpchannel/httpchannel/ipcchannel而不是tcpserverchannel/tcpclientchannel等。

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

        3
  •  -1
  •   RichardOD    15 年前

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