0

TFS サーバーへのアクセスが制限されているため、コードで管理者アカウントを使用してサーバーに接続するつもりでした。ドメインに参加していないコンピューターにサービスを展開すると、問題なく動作することがわかりました。 、しかし、ドメインに参加しているコンピューターにサービスを展開すると、統合された資格情報が使用されます。助けてくれてありがとう!以下は私のコードです。

        Uri tfsUri = Common.Helper.GetCollectionUri();
        UserCredential userCredential = new UserCredential("administrator", "pass@word1", "zanewill.net");

        TfsTeamProjectCollection col = new TfsTeamProjectCollection(tfsUri, userCredential);

        TeamFoundationIdentity identity;
        col.EnsureAuthenticated();
        col.GetAuthenticatedIdentity(out identity);

管理者の資格情報が必要ですが、ID は常に限定ドメイン アカウントである「zanewill」の資格情報です。

UserCredential のクラスは、 public class UserCredential のようなものです。 ICredentialsProvider { private NetworkCredential networkCredential;

    public UserCredential(string userName, string password, string domain) {
        networkCredential = new NetworkCredential(userName, password, domain);

    }

    public System.Net.ICredentials GetCredentials(Uri uri, System.Net.ICredentials myCredentials) {
        return networkCredential;
    }

    public void NotifyCredentialsAuthenticated(Uri uri) {

    }
}

次のコードのように NetworkCredential を使用していますが、動作しますが、理由はわかりません。

        Uri tfsUri = Common.Helper.GetCollectionUri();
        var networkCredential = new NetworkCredential("administrator", "pass@word1", "zanewill.com");

        TfsTeamProjectCollection col = new TfsTeamProjectCollection(tfsUri,networkCredential);
        TeamFoundationIdentity identity;
        col.EnsureAuthenticated();
        col.GetAuthenticatedIdentity(out identity);
4

1 に答える 1

1

理由は次のとおりです。

最初のコードでは、TfsTeamProjectCollectionの次のコンストラクターを使用しました。

public TfsTeamProjectCollection(
    Uri uri,
    ICredentialsProvider credentialsProvider
)

そして、2番目のパラメーターは次のように定義されます。

現在の環境のクレデンシャルが失敗したときにクレデンシャルを取得するために使用されます。

したがって、現在の環境の資格情報(つまり、前述の制限付きドメインアカウント)が失敗しない場合は、ICredentialsProviderを作成した管理者アカウントの代わりにそれが使用されます。このコードを試したときに、 zanewillとしてログオンしましたか?

使用した2番目のコンストラクターは、2番目のパラメーターを「認証資格情報」として受け取るため、使用されているコンストラクターです。

于 2011-11-15T02:07:06.700 に答える