SignalR与Web套接字

Luk*_*ina 30 c# asp.net signalr

我试图让websockets在我的开发环境中工作:

  • Visual Studio 2010
  • Windows 7的
  • 信号R 0.51
  • 最新的Chrome/Firefox

不幸的是,Javscript客户端正在使用长轮询.当我在客户端强制使用Web套接字时,我根本无法连接:

$.connection.hub.start({ transport: ['webSockets'] })
Run Code Online (Sandbox Code Playgroud)

服务器代码是自托管的,基于示例,如下所示:

static void Main(string[] args)
{
    string url = "http://localhost:8081/";
    var server = new Server(url);

    // Map the default hub url (/signalr)
    server.MapHubs();

    // Start the server
    server.Start();

    Console.WriteLine("Server running on {0}", url);

    // Keep going until somebody hits 'x'
    while (true)
    {
        ConsoleKeyInfo ki = Console.ReadKey(true);
        if (ki.Key == ConsoleKey.X)
        {
            break;
        }
    }
}

public class MyHub : Hub
{            
    public void Send(string message)
    {
        Clients.addMessage(message);
    }
}
Run Code Online (Sandbox Code Playgroud)

我四处搜寻,没有发现任何确定性.我是否需要指定一些额外的东西,使用Visual Studio 2012或者这只适用于Windows 8/IIS 8?

Maa*_*ten 56

即使在Windows 8/.NET 4.5上它最初也不起作用,但是通过这些额外的提示,我终于得到了它的工作.

SignalR自动协商websockets,不必指定它,代码中不需要任何特殊内容.

  • 完美的解决方案 - 第一部分默认在Azure Server2012中完成.添加了web.config设置和Web套接字连接开始工作:-) - 谢谢Maarten! (2认同)
  • 为什么这么难找到......太棒了...... :) (2认同)

Las*_*sen 23

基于这个答案/sf/answers/639473411/,您将看到SignalR中的WebSocket支持依赖于Windows 8/IIS8 - 答案也指向SignalR的github页面上的wiki页面,但是,该页面确实如此不再存在了.

但是,通过在github上克隆wiki repo并返回一些修订版,您将看到SignalR.WebSockets根据SignalR的github页面不再存在的项目文档- (这可能解释了为什么删除了wiki站点) - 但是,在SignalR.WebSockets从今年2月开始修改wikipage ,它声明:

所述SignalR.WebSockets 包可以被添加到现有的SignalR项目以允许客户端使用来连接WebSocket协议.SignalR jQuery客户端将自动尝试通过WebSockets进行连接(如果浏览器支持它),因此在客户端不需要对基于SignalR的应用程序添加WebSockets进行任何更改.

SignalR.WebSockets依赖于 Microsoft.WebSockets ,以便从ASP.NET中侦听传入的WebSocket连接.此包依赖于添加到ASP.NET 4.5和IIS 8.0的新WebSockets支持.因此,SignalR.WebSockets包只能在Windows 8计算机上运行(.NET 4.5将在早期版本的Windows上安装,但IIS 8.0需要Windows 8).有关如何设置Windows 8计算机的更多信息(使用开发人员预览),请参阅 此处.

我尝试过搜索比上面提供的更新的信息,但据我所知,SignalR wiki并未在其当前版本中明确涵盖此主题.

  • 这已经过时但是websocket支持仍然依赖于Windows 8. (6认同)
  • 实际上,您可以在自托管应用程序中使用WebSockets,而无需Windows 8/2012,IIS 8或.NET 4.5.我在这里解释了如何执行此操作的技术:http://stackoverflow.com/a/18337019/564726 (2认同)