gpt4 book ai didi

.net - 调查从服务器通知 WPF 客户端的解决方案

转载 作者:行者123 更新时间:2023-12-03 14:53:35 24 4
gpt4 key购买 nike

我有一个项目需要在服务器上发生某些事情时通知 WPF 桌面客户端。此外,不会广播给 WPF 客户端的通知(发送给每个客户端),它应该发送给特定的客户端。

我想远离老式的服务器轮询。这需要尽可能接近实时。

我以前从未有过这个要求,我正在研究解决方案。我的第一个想法是使用 SignalR.NET client .我还没有与 SignalR 合作过,但它似乎是一个解决方案。我知道这是对长轮询、服务器发送事件和 WebSockets 的抽象,具体取决于可用的内容。

我已经简要了解了带有回调和服务总线的 WCF,但对它们一无所知,也不知道这些技术是否适用于此。我可以使用以前解决过这个问题的人的一些反馈和建议。你会怎么做?

最佳答案

这可以通过 WCF 和 duplex contracts 轻松完成。 .您可以定义客户端可以在服务器上执行的操作(如任何 Web 服务),此外,您可以定义服务器可以在客户端上执行的操作(即反向 Web 服务)。代码方面,它们都只是简单的方法调用。客户端具有调用服务器上操作的方法,它还必须提供一个实现回调合约的对象,这是一个服务器可以调用的接口(interface),客户端必须提供一个实现。所有数据和消息的序列化/反序列化以及所有低级网络操作都由 WCF 处理,因此您不必担心。

WCF 支持使用两个绑定(bind)(或“协议(protocol)”)的双工契约(Contract):

  • WSDualHttpBinding - 这需要两个基于 SOAP 的 HTTP 监听器,一个在服务器上,一个在客户端上。当客户端想要联系服务器时,它会向服务器执行 HTTP 请求。当服务器想要联系客户端时,它会向客户端执行一个 HTTP 请求。这种方法的优点是任何网络连接都是短暂的,并且不会保持打开状态(与大多数 HTTP 连接一样),因此它可以支持大量或并发的客户端。主要缺点是它可能无法与 Internet 上的大多数客户端计算机一起使用,因为它们通常位于 NAT 之后(对于 Internet 上的服务器到服务器通信或 Intranet 或 LAN 内的任何类型的通信来说,这不是问题) .更多详情请看我的other answer .
  • NetTcpBinding - 这基本上打开了一个从客户端到服务器的套接字,并在 session 期间保持打开状态。这甚至允许通过 NAT 进行双向通信,但由于连接必须保持打开状态,这对服务器来说有点负担,因此将能够支持较少的并发用户(但在大多数情况下可能仍然绰绰有余)。这是我在 WCF 上执行双工契约(Contract)的首选方式,因为它更容易开始工作并且更可靠。

  • WCF 的优点是您可以在两个绑定(bind)之间切换而无需更改代码。所需要的只是更改配置(.config 文件)。

    无论您选择哪种方式,您都可以在两个方向上执行近乎瞬时的通信(当然,在网络延迟允许的情况下)。当您拥有如此丰富、强大且易于用户使用的框架(例如 WCF)时,我认为不需要 SignalR。如果您受限于在浏览器中运行,那么 SignalR 将是有意义的。由于您在 .NET 中运行,它只会引入不必要的摩擦。

    关于.net - 调查从服务器通知 WPF 客户端的解决方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8521711/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com