TFS 团队聊天室 Chrome 中禁止的 SignalR


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

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

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

浏览 TFS 安装的 Web 版本并访问"团队聊天室"时,我在 Chrome 控制台中收到 SignalR 错误:

403(禁止访问:已禁用 SignalR 跨域。

FF和IE中的相同链接工作正常。此外,如果我直接通过 TFS IP 地址访问团队聊天室链接(绕过 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 团队会议室功能吗?

我不知道

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

我使用Fiddler检查HTTP请求,以查看从Chrome和IE发送的请求之间有何不同。Chrome 会发送一个"来源"标头以及"引荐来源";IE 没有。我使用Fiddler的过滤器选项动态删除"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 正常工作。

最新更新