0
  • TFS 2013
  • 视窗服务器 2012
  • IIS 8.5
  • 应用程序请求路由 (ARR)

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

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

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

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

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

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

将此标头添加到 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 团队会议室功能吗?

4

1 回答 1

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 工作。

于 2015-01-05T21:11:47.590 回答