1

我试图确认是的,客户端可以向另一个域上的 ASP.NET 站点发送和接收消息,而无需运行启用 SignalR 的 ASP.NET 的 IIS 服务器支持 CORS。

有人可以为我提供一个示例,我可以看看 CORS不用作跨域机制的地方吗?

我们有 IE 9 客户端,并希望将不同域上的三个站点推/拉到单个 ASP.NET + SignalR 服务器。这可以做到吗?如何?

4

3 回答 3

1

要在使用带有 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});
            }
        }
    }
}

更多细节在这里:http ://www.asp.net/signalr/overview/signalr-20/hubs-api/hubs-api-guide-javascript-client#crossdomain

于 2013-11-27T20:53:07.703 回答
1

如果 cors 不可用 SignalR 使用带有 jsonp 的 longPolling 传输。

请记住,jsonp 在设计上是不安全的,并且可以限制您通过网络发送的数据,因为所有数据都是通过查询字符串发送的。

您不必为 SignalR 使用 jsonp 提供有关客户端的任何其他信息,它应该可以正常工作。

要确保跨域通信在服务器上正常工作,您必须启用它:

Routes.RouteTable.MapHubs(new HubConfiguration { EnableCrossDomain = true });
于 2013-06-26T19:04:36.360 回答
0

顺便说一句,WebSockets(跨源)将需要 CORS,因此最终(如果您想使用 Web 套接字)您将需要在服务器上支持它。

于 2013-06-27T03:46:51.493 回答