将 SignalR 用于桌面应用程序是不是正确?

Posted

技术标签:

【中文标题】将 SignalR 用于桌面应用程序是不是正确?【英文标题】: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。 【参考方案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,您可以在桌面环境(网络浏览器或其他桌面应用程序,例如控制家中的灯光或在打印机中打印内容的应用程序)中获得来自服务器的“实时”反应。

【讨论】:

以上是关于将 SignalR 用于桌面应用程序是不是正确?的主要内容,如果未能解决你的问题,请参考以下文章

SignalR 自托管与 WCF 服务和客户端将是桌面用户

SignalR 学习记录-简介

C# SignalR:从代码隐藏更新数据的问题

使用SignalR从服务端主动推送警报日志到各种终端(桌面移动网页)

使用HubConnection在SignalR中重新连接的正确逻辑

SignalR 不适用于 Windows 集成身份验证