在Azure模拟器中的MVC中托管的SignalR具有来自JS客户端的跨域问题

时间:2013-09-25 20:21:41

标签: azure signalr cors

我有一个Azure网络角色托管的SignalR中心(名为EventHub),该角色是在模拟器中运行的MVC 4应用程序,版权为127.0.0.2:81。在我的Application_Start中,我有:

RouteTable.Routes.MapHubs(new HubConfiguration { EnableCrossDomain = true });

在通过IIS在localhost:1003上运行的JS客户端中,我有:

$.connection.hub.url = 'http://127.0.0.2:81/signalr'; 
$.connection.hub.start().done(alert('connected'));

我的客户端可以连接到集线器并在其上调用方法,但在控制台中,我看到了:

XMLHttpRequest cannot load http://127.0.0.2:81/signalr/reconnect?transport=longPolling&connectionToken…&tid=0&_=1380138173967. Origin http://localhost:1003 is not allowed by Access-Control-Allow-Origin.

客户端最终断开连接。如果我使用相同的客户端和几乎相同的集线器实现并在localhost:62835的独立MVC应用程序中运行它,我根本没有得到跨源错误。我在Chrome v29中运行此功能。我没有指定任何自定义标头,也没有将jquery cors支持设置为true。

天蓝色仿真器是否会产生扭结?如果是这样,有什么办法吗?

更新

我已将我的网络角色发布到Azure,并且cors似乎在该环境中工作。此外,Chrome现在使用websockets连接,而不是连接到模拟器托管网站时尝试的longpolling。

我仍然希望能够通过模拟器运行本地测试,所以如果有人对如何实现这一点有任何想法,我将不胜感激。

1 个答案:

答案 0 :(得分:0)

我没有通过模拟器获取任何跨源错误,因为本地IIS Express SignalR应用程序与Windows8上的最新Azure SDK用于跨源方案,请确保您的repro中的模拟器已启动。