我有一个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。
我仍然希望能够通过模拟器运行本地测试,所以如果有人对如何实现这一点有任何想法,我将不胜感激。
答案 0 :(得分:0)
我没有通过模拟器获取任何跨源错误,因为本地IIS Express SignalR应用程序与Windows8上的最新Azure SDK用于跨源方案,请确保您的repro中的模拟器已启动。