.NET4.5中的WebSocket

.NET4.5中的WebSocket,websocket,signalr,Websocket,Signalr,我想开发一个web应用程序,在该应用程序中,客户端调用服务器上的服务来执行涉及一些处理的操作。服务器将执行所有必要的处理,当更新的数据准备就绪时,它将把数据推送到客户端。目前,我正在考虑两种方法: 1.将ASP.NET WEB API与Signal一起使用 2.在.NET4.5中将WebSocket与WCF一起使用 我的服务器将在Windows server 2012上,但我的大多数客户端将是IE 9,我认为它不支持WebSocket 正如signar文档中所写的,如果不更改应用程序代码而不提供

我想开发一个web应用程序,在该应用程序中,客户端调用服务器上的服务来执行涉及一些处理的操作。服务器将执行所有必要的处理,当更新的数据准备就绪时,它将把数据推送到客户端。目前,我正在考虑两种方法: 1.将ASP.NET WEB API与Signal一起使用 2.在.NET4.5中将WebSocket与WCF一起使用

我的服务器将在Windows server 2012上,但我的大多数客户端将是IE 9,我认为它不支持WebSocket

正如signar文档中所写的,如果不更改应用程序代码而不提供WebSockets支持,则会自动进行长轮询。无论.NET4.5中的WebSockets是否也支持这一点,还是我必须手动执行。表示是否必须在服务器上同时实现Pull方法和push方法

请指导我,我将遵循哪种方法


在以后的用例中,我想使用PhoneGAP构建此web应用程序,为iOS、Android和Windows Phone创建移动应用程序。

您可以从ASP.NET教程开始


在本教程之后,您将了解有关SignalR的所有基本知识,WebSocket不会回到longpolling(这没有真正意义)。SignalR是http传输上的一个更高级别抽象,这就是它执行回退和其他操作(例如通过连接提供一个好的编程模型)的原因

如果您选择在ASP.NET上使用websockets(不确定是否使用WCF),您将针对原始套接字进行编程(这意味着读取/写入数组段等),并且很难做好这项工作。如果客户端或服务器上没有WebSocket,SignalR将为您执行此操作,并将回退到其他几种传输(永久帧、服务器发送事件、长轮询)

关于客户端,如果您选择使用SignalR,则需要使用SignalR客户端。我们只支持javascript和.NET(silverlight、WindowsPhone8、winrt、.NET4和.NET4.5)。有些人为其他平台(包括iOS和Android)编写了客户端,但我们没有维护它们,所以我无法说明它们的最新情况


我建议您使用Signal,这样您就可以专注于您的应用程序逻辑,而不是混乱于WebSocket的低级编程模型。

我可以确认回退功能是自动工作的。如果无法使用WebSocket传输,则将使用ServersentEvents传输。。等等最后一个传输协议是longpolling

我们的SignalR服务器是一个.NET 4.5 framework应用程序,托管在使用windows 2012服务器上的4.5 DLL的ASP.NET MVC应用程序中。应用程序池是ASP.NET 4.0

  • Windows 8或Windows 2012服务器上的.NET 4.5客户端似乎使用WebSocket
  • Windows 7计算机上的同一个.NET客户端(即使安装了framework 4.5)也会自动退回到serversent事件传输
对于浏览器上的Signalr javascript客户端,也会发生类似的情况:

  • Chrome/Safari/其他支持WebSocket的浏览器似乎使用WebSocket
  • IE/其他不支持WebSocket但相对较新版本的浏览器似乎使用serversentevents
根据经验,serversentevents并不是很糟糕,因此如果WebSocket没有被使用,就不要推迟,当然也不要将其作为反对使用Signal的唯一因素,因为它有很多好处


希望这有帮助。

谢谢Ivo,但我想比较两种方法。.NET4.5中的信号器和WebSocket。如果环境不支持websocket,那么.NET 4.5中的websocket是否也会退回到长轮询,或者我必须手动处理它。有几个开源websocket库fo.NET(),请参阅未标记的答案。据我所知,他们不会像信号员那样撤退。SignalR为旧浏览器提供了3到4个回退。还要了解为什么windows phone 8不能通过Signal中的Web套接字连接?因为windows phone中没有websocket API8@dfowler虽然有一个套接字api,但这并不是一个借口。当然,似乎没有人写过,我们也没有写过。不过我们也接受拉拽请求