SignalR仅适用于localhost

时间:2016-10-11 08:24:04

标签: cors signalr owin self-hosting

在我的SignalR Client中,我有以下javaScript库:

<!--Reference the jQuery library. -->
<script src="Scripts/jquery-1.6.4.min.js"></script>
<!--Reference the SignalR library. -->
<script src="Scripts/jquery.signalR-2.2.1.min.js"></script>
<!--Reference the autogenerated SignalR hub script. -->
<script src="http://localhost:8081/signalr/hubs"></script>

在Javascript中我去了:

$.connection.hub.url = "http://localhost:8081/signalr;
$.connection.hub.logging = true;
var push = $.connection.exosChangeNotifier;
...
$.connection.hub.start().done();

该连接适用于localhost。 当我在VM或另一台计算机上运行我的SignalR集线器并用ip-address或计算机名替换localhost时,我得到了

http://[servername]:8081/signalr/hubs Failed to load resource: the server responded with a status of 400 (Bad Request)
Uncaught TypeError: Cannot read property 'client' of undefined.

我打开了计算机防火墙上的端口8081作为传出规则以及远程计算机或VM上的进入规则。使用Sysinternal psping我验证了端口可以访问:

psping.exe [servername]:8081 -h

使用Powershell Script我能够仔细检查计算机是否可以访问并且端口是打开的。

在自托管SignalR Startup上,我启用了CORS:

map.UseCors(CorsOptions.AllowAll);

我错过了什么?

1 个答案:

答案 0 :(得分:1)

我在this SO Question找到了解决方案。服务器必须以http:// *:8081开头,以响应内部和外部请求。在它被设置为只听localhost之前。