我试图确认是的,客户端可以向另一个域上的 ASP.NET 站点发送和接收消息,而无需运行启用 SignalR 的 ASP.NET 的 IIS 服务器支持 CORS。
有人可以为我提供一个示例,我可以看看 CORS不用作跨域机制的地方吗?
我们有 IE 9 客户端,并希望将不同域上的三个站点推/拉到单个 ASP.NET + SignalR 服务器。这可以做到吗?如何?
我试图确认是的,客户端可以向另一个域上的 ASP.NET 站点发送和接收消息,而无需运行启用 SignalR 的 ASP.NET 的 IIS 服务器支持 CORS。
有人可以为我提供一个示例,我可以看看 CORS不用作跨域机制的地方吗?
我们有 IE 9 客户端,并希望将不同域上的三个站点推/拉到单个 ASP.NET + SignalR 服务器。这可以做到吗?如何?
要在使用带有 OWIN 中间件而不是常规 ASP.NET 管道的 SignalR 2.0 时启用此功能,请Microsoft.Owin.Cors
从 NuGet 安装包,然后执行以下操作:
[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});
}
}
}
}
如果 cors 不可用 SignalR 使用带有 jsonp 的 longPolling 传输。
请记住,jsonp 在设计上是不安全的,并且可以限制您通过网络发送的数据,因为所有数据都是通过查询字符串发送的。
您不必为 SignalR 使用 jsonp 提供有关客户端的任何其他信息,它应该可以正常工作。
要确保跨域通信在服务器上正常工作,您必须启用它:
Routes.RouteTable.MapHubs(new HubConfiguration { EnableCrossDomain = true });
顺便说一句,WebSockets(跨源)将需要 CORS,因此最终(如果您想使用 Web 套接字)您将需要在服务器上支持它。