我正在尝试确认是,客户端可以向另一个域上的ASP.NET站点发送和接收消息,而无需运行启用SignalR的ASP.NET的IIS服务器支持CORS。
有人可以向我提供一个示例,我可以看一下CORS 不是用作跨域机制的地方吗?
我们有IE 9客户端,并希望将不同域上的三个站点推/拉到单个ASP.NET + SignalR服务器。可以这样做吗?怎么样?的
答案 0 :(得分:1)
如果没有cors,SignalR会使用带有jsonp的longPolling传输。
请记住,jsonp设计不安全,可能会限制您通过网络发送的数据,因为所有数据都是通过查询字符串发送的。
您不应该在客户端上提供有关SignalR使用jsonp的任何其他信息,它应该可以正常工作。
要确保跨服务器上的跨域通信正常工作,您必须启用它:
Routes.RouteTable.MapHubs(new HubConfiguration { EnableCrossDomain = true });
答案 1 :(得分:1)
要在将SignalR 2.0与OWIN中间件而不是常规ASP.NET管道一起使用时启用此功能,请从NuGet安装Microsoft.Owin.Cors
软件包,然后执行以下操作:
[assembly: OwinStartupAttribute(typeof(OwinStartup))]
namespace Website.App_Start
{
public partial class OwinStartup
{
public void Configuration(IAppBuilder app)
{
app.Map("/signalr", map =>
{
map.UseCors(CorsOptions.AllowAll);
map.RunSignalR(new HubConfiguration {EnableJSONP = true});
}
}
}
}
此处有更多详情:http://www.asp.net/signalr/overview/signalr-20/hubs-api/hubs-api-guide-javascript-client#crossdomain
答案 2 :(得分:0)
要添加,WebSockets(交叉源)将需要CORS,因此最终(如果您想使用Web套接字),您需要在服务器上支持此功能。