使用SignalR来开发桌面应用程序是否正确?

34

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

使用SignalR与Windows桌面应用程序的优缺点是什么?

是否有性能方面的考虑?

我想在服务器和很多客户端之间建立实时连接。 连接将是持续的。


第一个问题是“能否”,第二个问题(这里变得非常广泛)实际上是“比较和对比……”,但除此之外没有明确说明。 - user2864740
看看 WCF。 - Anton Semenov
如果您有一个OWIN上下文,那么SignalR将实现您想要实现的目标。否则,只需在代码中打开自己的Web套接字即可。在我看来,在OWIN上下文中使用WebApi、SignalR比使用WCF更容易。 - Callum Linington
您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - Liero
首先,我们认为我们的应用程序将从托管在其他地方的SignalR消耗数据。 - Seçkin Durgay
是的,那绝对正确。 - Liero
4个回答

28
引用: SignalR适用于Windows桌面应用程序(WinForms/WPF)吗? signalr.net的答案是: SignalR可用于向ASP.NET应用程序添加任何类型的“实时”Web功能。 (正如其他人正确指出的那样,它可以自主托管,因此无需IIS) 因此,答案似乎是否定的。 它是一个服务器端API。 但今天是你的幸运日,因为SignalR的下载不仅揭示了服务器端API,而且还包含一个名为Microsoft.AspNet.SignalR.Client45的客户端API,可用于你的应用程序。 它适用于WPF,WF甚至控制台应用程序。 即使没有这个,SignalR只是WebSockets协议的封装,该协议是HTTP协议的一部分,几乎可以在任何平台上使用。 下载还包含iOS和Xamarin的示例。

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

实现与服务器之间的实时通知。

是否存在性能问题?

这是一个难以回答的问题,因为没有参考点。相对于什么来说,性能好还是不好?一般来说,我认为你不必太担心这个问题。API本身很快,并且它可以防止你需要做其他慢速拉取请求的情况。


3
我不同意。SignalR的设计初衷就是与IIS和asp.net松耦合。在WPF应用程序中托管SignalR中心是被支持的场景。 - Liero
1
可以在asp.net中使用并不意味着它不能与WPF一起使用。还有其他关于非iis场景的微软资源,例如http://www.asp.net/signalr/overview/deployment/tutorial-signalr-self-host。 - Liero
你的意思是用WPF来托管吗?WPF是一个演示平台,不是后端。 - Patrick Hofman
我指的是桌面应用程序一般。 - Liero
@Liero 好的。已更新。 - Patrick Hofman
显示剩余2条评论

14

在任何客户端应用程序中,包括WPF、Windows Phone、UWP、iOS、Android以及HTML中,使用SinglarR Hub都是绝对正确的。微软已经为许多平台创建了客户端库。

但是当涉及到托管SignalR时,您可以将SingalR服务器(hub)托管在WPF应用程序中,但需要有一个理由:

可能的原因包括:

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

顺便说一句,SignalR和OWIN已经成为新ASP.NET 5的灵感来源。现在,您可以在WPF、控制台应用程序或Windows服务应用程序中托管ASP.NET应用程序,而无需IIS,甚至可以在Linux上进行托管。

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


5
在一个服务器和多个客户端的设置中:如果您需要从服务器向某些客户端发送“推送”通知,则可以使用SignalR。
我在WPF客户端上这样做。

1
当您构建具有SignalR功能的网站时,您拥有一个SignalR服务器,网站托管在其中,以及一个SignalR客户端——JavaScript客户端,在其中运行浏览该网站的Web浏览器中。从年代久远开始,Web浏览器就是桌面应用程序,因此您拥有使用SignalR连接到Web服务器(Web浏览器)的桌面应用程序。因此,不仅在桌面应用程序中使用SignalR是正确的,而且这就是它的用途。如果没有在某个时间点在桌面应用程序中使用SignalR,我真的不知道它的用途是什么,因为实际上用户坐在桌面前(或智能设备),并不存在于“云”中(除非您是来自《黑客帝国》的Neo)。通过SignalR,您可以在桌面环境(例如Web浏览器或另一个桌面应用程序,例如控制家庭灯光或打印机中的应用程序)中呈现来自服务器的“实时”反应。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接