跨域不支持signalr 2.0
本文关键字:signalr 不支持 | 更新日期: 2023-09-27 18:13:27
我有一个应该服务于多个域的signalr 2.0服务器。所以我需要在我的服务器上启用CORS。我使用iis7.5作为web服务器。我在项目的Startup
方法中启用了CORS,如下所示
public void Configuration(IAppBuilder app)
{
app.Map("/signalr", map =>
{
// Setup the CORS middleware to run before SignalR.
// By default this will allow all origins. You can
// configure the set of origins and/or http verbs by
// providing a cors options with a different policy.
map.UseCors(CorsOptions.AllowAll);
var hubConfiguration = new HubConfiguration
{
// You can enable JSONP by uncommenting line below.
// JSONP requests are insecure but some older browsers (and some
// versions of IE) require JSONP to work cross domain
// EnableJSONP = true
};
// Run the SignalR pipeline. We're not using MapSignalR
// since this branch already runs under the "/signalr"
// path.
map.RunSignalR(hubConfiguration);
}
}
这段代码是从本文复制粘贴过来的http://www.asp.net/signalr/overview/signalr-20/hubs-api/hubs-api-guide-javascript-client
我创建了一个本地主机项目并尝试连接到信号服务器。
但是我在firefox中得到以下错误
Cross-Origin Request Blocked: The Same Origin Policy禁止在http://MyWebSite.com:8082/signalr/negotiate?connectionData=%5B%7B%22name%22%3A%22sahragostarhub%22%7D%5D&clientProtocol=1.3&_=1405622027746
读取远程资源,这可以通过将资源移动到相同的域或启用CORS来修复。谈判
和这个错误在chromeXMLHttpRequest无法加载http://MyWebSite.com:8082/signalr/negotiate?connectionData=%5B%7B%22name%22%3A%22sahragostarhub%22%7D%5D&clientProtocol=1.3&_=1405622032883
。请求的资源上没有'Access-Control-Allow-Origin'标头。Origin '(我的客户端网站地址)'因此不允许访问
我还添加了以下行到我的web.config
<httpProtocol>
<customHeaders>
<clear />
<add name="Access-Control-Allow-Origin" value="*" />
</customHeaders>
</httpProtocol>
尝试在您的配置中删除WebDAV模块:
<configuration>
<system.webServer>
<modules>
<remove name="WebDAVModule" />
...
我今天遇到了这个问题,在摸索了一下之后,发现安装了microsoft . win. cors包为我解决了这个问题。
在Package Manager Console中运行以下命令:
Install-Package Microsoft.Owin.Cors
经过一番努力,我的问题终于解决了。似乎是端口号冲突导致了这个问题。我在我的服务器上停止其他网站,并停止任何其他iis express服务,然后它工作得很好。谢谢你关注我的问题。
在你的Application_Start使用下面的代码使用MapHubs的重载方法
var hubConfiguration = new HubConfiguration();
hubConfiguration.EnableCrossDomain = true;
RouteTable.Routes.MapHubs(hubConfiguration);