跨域不适用于signalr 2.0

时间:2014-07-17 19:31:12

标签: c# asp.net 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

我创建了一个localhost项目并尝试连接到signalr服务器。

但是我在firefox中遇到以下错误

阻止跨源请求:同源策略禁止在http://MyWebSite.com:8082/signalr/negotiate?connectionData=%5B%7B%22name%22%3A%22sahragostarhub%22%7D%5D&clientProtocol=1.3&_=1405622027746读取远程资源。可以通过将资源移动到同一域或启用CORS来解决此问题。谈判

以及Chrome中的此错误 XMLHttpRequest无法加载http://MyWebSite.com:8082/signalr/negotiate?connectionData=%5B%7B%22name%22%3A%22sahragostarhub%22%7D%5D&clientProtocol=1.3&_=1405622032883。请求的资源上不存在“Access-Control-Allow-Origin”标头。因此,不允许来源'(我的客户站点地址)'访问

我还将以下行添加到我的web.config

 <httpProtocol>
      <customHeaders>
        <clear />
       <add name="Access-Control-Allow-Origin" value="*" />
      </customHeaders>
    </httpProtocol>

这种改变也没用。

4 个答案:

答案 0 :(得分:6)

在您的配置中尝试removing WebDAV模块(帮助我一段时间):

<configuration>              
    <system.webServer>                   
        <modules>
            <remove name="WebDAVModule" />
...

答案 1 :(得分:3)

我今天经历过这种情况,经过一番探索后,发现安装Microsoft.Owin.Cors包解决了这个问题。

只需在程序包管理器控制台中运行以下命令:

Install-Package Microsoft.Owin.Cors

构建并重新加载页面。

答案 2 :(得分:1)

最后我的问题在经过多次努力后得到了解决。似乎端口号冲突导致此问题。 我停止在我的服务器上的其他网站,并停止任何其他iis快递服务,然后它工作正常。感谢您关注我的问题。

答案 3 :(得分:0)

在Application_Start中使用下面的代码使用MapHubs的重载方法

var hubConfiguration = new HubConfiguration();
hubConfiguration.EnableCrossDomain = true;
RouteTable.Routes.MapHubs(hubConfiguration);