I think SignalR is the way to go, and is going to be part of .NET itself anyway (and likely extend/merge/replace web-sockets support). It uses web sockets when it's supported, and consistent client polling hack when it's not, so, it's the way to go.
Update:
Since this answer is still getting upvoted, it's worth mentioning that SignalR is now officially part of ASP.NET.
Check http://asp.net/signalr
Update: .NET Core
SignalR is also being added to .NET Core as @yazanpro noted in comments.
It's available in .NET Core 2.1, and has official documentation as well.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…