我想开发一个Web应用程序,其中客户端调用服务器上的服务来执行一些涉及某些处理的操作。服务器将执行所有必要的处理,当更新的数据准备就绪时,它会将该数据推送到客户端。目前我正在考虑两种方法: - 1.将ASP.NET WEB API与SignalR一起使用 2.在.NET 4.5中使用带有WCF的WebSockets。
我的服务器将在Windows Server 2012上,但我的大部分客户端都是IE 9,我认为它不支持WebSockets。
如SignalR文档所述,如果在不更改应用程序代码的情况下不存在WebSockets支持,它将自动落入Long Polling。是否还支持.NET 4.5中的WebSockets,或者我必须手动执行此操作。表示我是否必须在服务器上同时实现Pull方法和push方法。
请指导我,我将遵循哪种方法。
在后面的用例中,我想使用PhoneGAP构建此Web应用程序,以便为iOS,Android和Android创建移动应用程序。 Windows Phone。
答案 0 :(得分:9)
WebSockets不会回归到longpolling(这真的没有意义)。 SignalR是一种比http传输更高级别的抽象,这就是它做后备和其他事情的原因(比如在连接上提供一个很好的编程模型)。
如果您选择在ASP.NET上使用websockets(不确定WCF),您将针对原始套接字进行编程(这意味着读/写数组段等)并且做得很好就很难了。如果客户端或服务器上没有websockets,SignalR会为您执行此操作并将回退到其他几个传输(永久帧,服务器发送事件,长搜索)。
关于客户,如果您选择使用SignalR,则需要使用SignalR客户端。我们只支持javascript和.NET(silverlight,windows phone 8,winrt,.NET 4和.NET 4.5)。有些人已经为其他平台编写了客户端,包括iOS和Android,但是我们没有对它们进行维护,所以我不能说它们是如何更新的。
我建议你使用SignalR,这样你就可以专注于你的应用程序逻辑,而不是搞乱websockets的低级编程模型。
答案 1 :(得分:1)
您可以从ASP.NET教程http://www.asp.net/signalr/overview/getting-started/tutorial-getting-started-with-signalr
开始在本教程之后,您将了解有关SignalR的所有基本知识
答案 2 :(得分:1)
我可以确认回退是否自动生效。如果无法使用websockets传输,将使用ServersentEvents传输..依此类推..最后一个传输协议是longpolling。
我们的SignalR服务器是一个.NET 4.5框架应用程序,在Windows 2012服务器上使用4.5 dll托管在ASP.NET MVC App中。应用程序池是ASP.NET 4.0。
在浏览器上使用Signalr javascript客户端时,会发生类似的事情:
根据经验,serversentevents并不是很糟糕,因此如果没有使用websockets,请不要推迟使用它,当然不要使用它作为使用signalR的唯一因素,因为好处很多。
希望这有帮助。