IIS上托管的ASP.NET 5(DNX)中的WebSockets无法正常工作

时间:2016-01-03 17:59:01

标签: iis websocket signalr asp.net-core dnx

我的网站使用带有RC1-Update1的ASP.NET 5,并且与客户端的一些通信通过网络套接字(使用SignalR)。

在测试期间,我发现在IIS(或IIS Express)上运行时,通信无法通过套接字工作。 SignalR回退到长轮询。

SignalR日志:

       friendsArray.push(x);

经过长时间的调试,我通过命令行直接通过dnx(没有IIS或其他任何东西)启动我的网站:

SignalR: Client subscribed to hub 'chathub'.
SignalR: Negotiating with '/signalr/signalr/negotiate?clientProtocol=1.5&connectionData=%5B%7B%22name%22%3A%22chathub%22%7D%5D'.
SignalR: serverSentEvents transport starting.
SignalR: Attempting to connect to SSE endpoint 'http://localhost:31650/signalr/signalr/connect?transport=serverSentEvents&c…wVlnXCY8bI7R8E&connectionData=%5B%7B%22name%22%3A%22chathub%22%7D%5D&tid=2'.
SignalR: serverSentEvents transport timed out when trying to connect.
SignalR: EventSource calling close().
SignalR: serverSentEvents transport failed to connect. Attempting to fall back.
SignalR: foreverFrame transport starting.
SignalR: Forever Frame is not supported by SignalR on browsers with SSE support.
SignalR: foreverFrame transport failed to connect. Attempting to fall back.
SignalR: longPolling transport starting.
SignalR: Opening long polling request to 'http://localhost:31650/signalr/signalr/connect?transport=longPolling&client…8WRrhWwVlnXCY8bI7R8E&connectionData=%5B%7B%22name%22%3A%22chathub%22%7D%5D'.
SignalR: Long poll complete

网络套接字工作开箱即用,没有任何问题。

在我对解决方案的研究中,我发现在带有socket.io网络应用程序的nodejs中,必须禁用IIS中的Web套接字,以便将它们正确转发到nodejs(链接到资源here on iis.net),所以我尝试了同样的事情并得到了错误(只要web.config中存在dnx web 元素就会发生):

  

尝试确定托管您的应用程序的DNX进程的进程ID时发生错误。

我的web.config:

webSocket

此时我已经没想完了。我确保在Windows功能中安装了WebSockets,并尝试在Azure上部署我的网站(打开Web套接字),完成后将托管该网站。

我会说问题是网络套接字没有被转发到DNX,但找不到它的解决方案。任何帮助将不胜感激。

更新

Solution where the problem is recreated.

1 个答案:

答案 0 :(得分:2)

问题在于缺少包Microsoft.AspNet.WebSockets.Server并在startup.cs app.UseWebSockets()中进行了调用。

问题在GitHub得到解决,非常感谢@davidfowl。