.NET 远程处理回调

发布于 2024-08-07 15:40:23 字数 190 浏览 2 评论 0原文

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

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

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

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

地狱即天堂 2024-08-14 15:40:23

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

例如 TcpChannel/HttpChannel/IpcChannel 而不是 TcpServerChannel/TcpClientChannel 等。

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

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

征﹌骨岁月お 2024-08-14 15:40:23

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

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

}

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

}
笨笨の傻瓜 2024-08-14 15:40:23

在 WCF 中,您使用回调操作。如果您可以使用 WCF 或远程处理,请选择 WCF。远程处理被归类为遗留。

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文