0
  • TFS 2013
  • Windows Server 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 チーム ルーム機能にアクセスする方法を知っている人はいますか?

4

1 に答える 1

2

答えはわかりませんが、同じ問題といくつかの情報があります。

Fiddler を使用して HTTP リクエストを調べ、Chrome から送信されたリクエストと IE から送信されたリクエストの違いを確認しました。Chrome は「リファラー」とともに「オリジン」ヘッダーを送信します。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 に答える