Chrome中禁止使用TFS Team Room SignalR

时间:2015-01-05 05:46:31

标签: google-chrome iis tfs signalr arr

  • TFS 2013
  • Windows Server 2012
  • IIS 8.5
  • 应用程序请求路由(ARR)

我正在使用ARR作为反向代理,将该服务器上URL的任何请求重新路由到我在该服务器上为TFS设置的IP地址。

一切都很好,除了在Chrome中(不经常这么说)。

在浏览我的TFS安装的Web版本并访问“Team Room”时,我在Chrome控制台中收到SignalR错误:

  

403(禁止使用:禁用SignalR跨域。)

FF和IE中的相同链接工作正常。此外,如果我通过TFS IP地址直接访问Team Room链接(绕过ARR),它可以正常工作。

我尝试了很多不同的方法来解决这个问题。

将此标题添加到TFS的web.config

<add name="Access-Control-Allow-Origin" value="http://tfs.mydomain.com"/>

在JavaScript中设置SignalR连接的连接URL并使用JSONP,如下所示:

$.connection.hub.url = "http://my.ip.address:8080/tfs/signalr"; 
options = ({jsonp: true})
$.connection.hub.start(options)

我甚至尝试了另一种我在网上发现的禁用ARR缓存的方法。

有很多解决方案说我应该在服务器上启用SignalR的跨域请求,但是由于这是用于TFS安装,我没有自由修改TFS的二进制文件(据我所知)而且我无法通过查看SignalR API找到在客户端上执行此操作的方法。

我遇到这个问题的另一个答案是Chrome被窃听并且不使用它(这是不可取的)。

有人知道如何使用Chrome访问TFS团队空间功能吗?

1 个答案:

答案 0 :(得分:2)

我不知道答案,但我有同样的问题和一些信息。

我使用Fiddler检查HTTP请求,以查看从Chrome和IE发送的请求之间的差异。 Chrome会将“origin”标题与“referrer”一起发送; IE没有。我使用Fiddler的Filter选项动态删除“origin”标题,只要Fiddler捕获,Chrome就能正常工作。

这些是Chrome发送的一些标题:

Origin: https://[domain]
X-Requested-With: XMLHttpRequest
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
Referer: https://[domain]/tfs/_rooms

删除Fiddler滤镜中的“Origin”标题可让Chrome正常工作。