【问题标题】:Is it correct to use SignalR for desktop applications?将 SignalR 用于桌面应用程序是否正确?
【发布时间】:2015-09-24 13:15:42
【问题描述】:

SignalR 是否适用于 Windows 桌面应用程序 (winforms/wpf)?

在 Windows 桌面应用程序中使用 SignalR 有哪些优点和缺点?

是否有任何性能方面的考虑?

我想在服务器和很多客户端之间建立实时连接。连接将保持不变。

【问题讨论】:

  • 你想用 SignalR 实现什么?
  • 感谢您的提问。我已经编辑了问题
  • 第一个问题是“可以”,第二个问题(这是它变得非常广泛的地方)实际上是“比较和对比..”,但在其他方面含糊不清。
  • 改用 WCF 看看
  • 如果您有 OWIN 上下文,那么是的,SignalR 将实现您希望它实现的目标。否则,只需在代码中打开您自己的网络套接字。恕我直言,OWIN 上下文中的 WebApi、SignalR 更易于使用,然后使用 WCF。

标签: c# .net wpf winforms signalr


【解决方案1】:

SignalR 是否适用于 Windows 桌面应用程序 (winforms/wpf)?

signalr.net 的回答是:

SignalR 可用于向您的 ASP.NET 应用程序添加任何类型的“实时”网络功能。

(正如其他人所说的正确,它可以自托管,所以no need for IIS

所以答案似乎是。它是一个服务器端 API。但是今天是您的幸运日,因为下载 SignalR 不仅会显示服务器端 API,还会显示一个名为 Microsoft.AspNet.SignalR.Client45 的客户端 API,可在您的应用程序中使用。它适用于 WPF、WF 甚至控制台应用程序。

即使没有,SignalR 也只是 WebSockets protocol 的包装,它是 HTTP 协议的一部分,几乎可以在任何平台上使用。下载内容还包含一个适用于 iOS 和 Xamarin 的示例。

在 Windows 桌面应用程序中使用 SignalR 有哪些优点和缺点?

从服务器接收实时通知。

是否存在性能问题?

这是一个很难回答的问题,因为没有参考点。相比什么表现是好是坏?一般来说,我认为您不必为此担心太多。 API 本身速度很快,它可能会阻止您需要执行其他操作的缓慢拉取请求。

【讨论】:

  • 我不同意。 SignalR 被设计为有目的地与 IIS 和 asp.net 分离。支持在 wpf 应用中托管 SignalR 集线器的场景
  • 我同意,但这是微软自己说的,只是引用了源代码。
  • 可以与asp.net一起使用并不意味着它不能与WPF一起使用。还有其他关于非 iis 场景的 MS 来源,例如 asp.net/signalr/overview/deployment/tutorial-signalr-self-host
  • 是的,你做到了。您的回答似乎对 WPF 中的正确性更加消极,我不同意。不过这里没必要争论。
  • 您的意思是 WPF 用于托管? WPF 是一个演示平台。不是后端。
【解决方案2】:

在任何客户端应用程序、WPF、windows phone、UWP、iOS、Android(包括 HTML)中使用 SinglarR 集线器是绝对正确的。 Microsoft 已在许多平台上创建了客户端库。

说到托管 SignalR,那么您绝对可以在 WPF 应用程序中托管您的 SingalR 服务器(集线器),但您需要一个理由:

原因可能是:

  • IIS 不可用
  • 你事先不知道APP会在哪里 使用。你只需要运行一个应用程序,它会通知其他应用程序
  • 性能 - IIS 增加了一些性能开销。

顺便说一句,SignalR 和 OWIN 一直是新 ASP.NET 5 的灵感来源。您现在可以在没有 IIS 的 WPF、控制台应用程序或 Windows 服务应用程序中托管您的 ASP.NET 应用程序,甚至可以在 Linux 上。

http://www.asp.net/signalr/overview/deployment/tutorial-signalr-self-host

【讨论】:

    【解决方案3】:

    在具有服务器和许多客户端的设置中:如果您需要将通知从服务器“推送”到某些客户端,那么 SignalR 很适合使用。

    我对 WPF 客户端这样做。

    【讨论】:

    • 任何教程或有用的链接?
    【解决方案4】:

    当您构建具有 Signalr 功能的网站时,您将拥有一个 signalR 服务器(托管该网站)和一个 Signalr 客户端(在浏览该网站的 Web 浏览器中运行的 javascript 客户端)。

    从不朽的岁月开始,网络浏览器曾经(现在仍然是)......嗯,......桌面应用程序......

    因此,您拥有使用 SignalR 连接到网站(网络服务器)的桌面应用程序(网络浏览器)。

    因此,将 signalR 用于桌面应用程序不仅是正确的,而且这也是它的意义所在。我真的不知道如果 signalR 在某些时候不用于桌面应用程序会有什么用,因为坦率地说,用户坐在桌面(或智能设备)前,并且不不存在“在云端”(除非你是来自 Matrix 的 Neo)。使用 signalR,您可以在桌面环境(网络浏览器或其他桌面应用程序,例如控制家中的灯光或在打印机中打印内容的应用程序)中获得来自服务器的“实时”反应。

    【讨论】:

      猜你喜欢
      • 2023-04-05
      • 2015-11-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多