0

TFS2012に連携するWebアプリを開発しています。私のローカルマシンでは問題なく動作しますが、サーバーにデプロイすると次の例外が発生します:

[WebException: リモート サーバーがエラーを返しました: (401) Unauthorized.] System.Net.HttpWebRequest.GetResponse() +6440920 Microsoft.TeamFoundation.Client.Channels.TfsHttpWebRequest.SendRequestAndGetResponse(HttpWebRequest webRequest, WebException& webException) +195

私のTFSコードへの接続:

            _collection = TfsTeamProjectCollectionFactory.GetTeamProjectCollection(new Uri("http://xxx/tfs/TestPrjects/"));
            _collection.EnsureAuthenticated();
            _store = _collection.GetService<WorkItemStore>();

私のウェブ設定:

<system.web>
  <customErrors mode="Off"></customErrors>
  <authentication mode="Windows"/>
  ...
<system.web>

ISS i で Windows 認証を有効にします。

ここに画像の説明を入力

私の間違いはどこですか?

4

1 に答える 1

3

TFS へのアクセスに使用している詳細が正しくありません。

ローカル マシンで動作する理由は、TFS にアクセスできるユーザーとして Web サーバーが実行されているためです。IIS サーバーでは、アクセス権のないアプリ プール ユーザーとして実行されています。

考えられる解決策

TFS へのアクセス権を持つユーザーとしてアプリケーション プールを実行します (または現在のユーザー アクセス権を付与します)
。これは読み取り専用アクセスの場合は問題ありませんが、項目に書き戻す場合は、このルートをたどりたくない場合があります。

TFS に接続するコードが現在認証されている Windows ユーザーとして実行されるように委任を有効 にします。Firefox ユーザーは設定を変更でき、Chrome ユーザーはコマンドライン スイッチで chrome を起動する必要があります。

TFS を使用するコードを using(WindowsIdentity.GetCurrent().Impersonate()) {} でラップし、CredentialCache.DefaultNetworkCredentials を使用して TFS に接続していることを確認します。

TFS サーバー API を使用する いたずらをして、クライアント API の代わりにサーバーを使用します。サーバー API はデータベースに直接書き込み、ユーザーを偽装する必要はありません。これがサポートされているパスであるかどうかは非常に疑わしく、多くの情報は見つかりません。ただし、データベースにアクセスできるユーザーとして実行する必要があります (オプション 1 と同様ですが、Windows 認証ユーザーとしての更新をサポートします)。

于 2012-09-24T03:52:30.890 に答える