【发布时间】:2013-07-30 21:41:40
【问题描述】:
自托管应用程序似乎不通过 IIS 运行,所以它是否需要特定的操作系统才能在服务器端启用 Web 套接字?
【问题讨论】:
标签: signalr
自托管应用程序似乎不通过 IIS 运行,所以它是否需要特定的操作系统才能在服务器端启用 Web 套接字?
【问题讨论】:
标签: signalr
浏览器会支持它,因为它们已经在内部实现了协议,大多数浏览器不会使用操作系统传输库,因此即使操作系统不直接支持它,它们也可以使用 WebSockets。
Windows 8/2012 has no built in support for WebSockets 之前的 HTTP.SYS,因此尽管 .NET 4.5 包含 WebSocket 类,但除非您在 Windows 8/2012 上运行 .NET 4.5+,否则它们将无法工作,这将影响自托管在 Windows
实现驻留在 .NET 和 IIS8 刚刚利用的操作系统代码中。 .NET 类只是将调用封装到 HTTP.SYS,因此它会在没有底层支持的操作系统上引发异常。
但是,当自托管时,您可以使用自己的内部 Web 套接字服务器,例如 Fleck,并告诉 SignalR,无论您的操作系统如何,您实际上都支持 Web 套接字。
在您的自托管应用程序中启动Fleck 服务器(their site 上的示例),作为示例,您可以为 PersistentConnection 自托管:
public override Task ProcessRequest(HostContext context)
{
// Override what SignalR will be telling you internally and point to your own Web Socket Server.
context.Items[HostConstants.SupportsWebSockets] = true;
context.Items[HostConstants.WebSocketServerUrl] = "ws://localhost:3000";
return base.ProcessRequest(context);
}
免责声明:这是一个未记录的功能,SignalR 的开发人员告诉我,这在库的未来版本中可能无法实现。请记住,您还需要满足保持活动状态并将您的数据序列化为 JSON,以便它与 SignalR 客户端配合得很好。它在 1.1.3 版本中仍然有效。
【讨论】:
ProcessRequest。 Owin 与这个问题或答案无关,完全偏离主题。
通过快速测试,我确定现在不支持 websocket。我创建了一个自托管集线器,然后创建了一个快速 jquery 客户端。在我的 Windows 8 机器上,查询字符串显示 websockets,在服务器 2008 r2 上显示长轮询......
【讨论】:
是的,它需要 Windows Server 2012 检查下面来自SignalR Supported Platforms 的报价
SignalR 服务器组件可以托管在以下服务器或 客户端操作系统。请注意,对于 SignalR 使用 WebSockets, 需要 Windows Server 2012 或 Windows 8(WebSocket 可以在 Windows Azure 网站上使用,只要站点的 .NET 框架版本设置为 4.5,并且在站点的配置页面中启用了 Web Sockets)。
还有一个很好的阅读为什么可以找到here
【讨论】: