コンソール アプリケーションからの Team Foundation Server への接続
Team Foundation を実行しているサーバーにプログラムで接続して、次の例を使ってそのサーバーにあるチーム プロジェクトにアクセスできます。 例を変更した場合、このトピックの後半の Getting Additional Team Foundation Services で説明されているサービスを使用できます。 また、このトピックの後半の Acting on Behalf of Another User (Impersonation) で説明されているように、偽装を使って他の人の代わりに行動することもできます。
このトピックの内容
例
次の例を使うと、チーム プロジェクト コレクションおよびそこに含まれるチーム プロジェクトをリストにすることができます。
この例を使うには
C# コンソール アプリケーションを作成します。
次のアセンブリへの参照を追加します。
Program.cs のコンテンツを、このトピックの後半に示すコードで置き換えます。
そのコードで、TfsConfigurationServer オブジェクトを構築するために使う URL の Server、Port、および VDir を置き換えて、ご使用のサーバーをその URL が参照するようにします。
ヒント
正しい URL を使用していることを確認するために、チーム エクスプローラー を使ってサーバーでチーム プロジェクトを開き、サーバーの URL プロパティを確認します。
using System; using System.Collections.ObjectModel; using Microsoft.TeamFoundation.Client; using Microsoft.TeamFoundation.Framework.Common; using Microsoft.TeamFoundation.Framework.Client; namespace TfsApplication { class Program { static void Main(String[] args) { // Connect to Team Foundation Server // Server is the name of the server that is running the application tier for Team Foundation. // Port is the port that Team Foundation uses. The default port is 8080. // VDir is the virtual path to the Team Foundation application. The default path is tfs. Uri tfsUri = (args.Length < 1) ? new Uri("http://Server:Port/VDir") : new Uri(args[0]); TfsConfigurationServer configurationServer = TfsConfigurationServerFactory.GetConfigurationServer(tfsUri); // Get the catalog of team project collections ReadOnlyCollection<CatalogNode> collectionNodes = configurationServer.CatalogNode.QueryChildren( new[] { CatalogResourceTypes.ProjectCollection }, false, CatalogQueryOptions.None); // List the team project collections foreach (CatalogNode collectionNode in collectionNodes) { // Use the InstanceId property to get the team project collection Guid collectionId = new Guid(collectionNode.Resource.Properties["InstanceId"]); TfsTeamProjectCollection teamProjectCollection = configurationServer.GetTeamProjectCollection(collectionId); // Print the name of the team project collection Console.WriteLine("Collection: " + teamProjectCollection.Name); // Get a catalog of team projects for the collection ReadOnlyCollection<CatalogNode> projectNodes = collectionNode.QueryChildren( new[] { CatalogResourceTypes.TeamProject }, false, CatalogQueryOptions.None); // List the team projects in the collection foreach (CatalogNode projectNode in projectNodes) { Console.WriteLine(" Team Project: " + projectNode.Resource.DisplayName); } } } } }
Imports System Imports System.Collections.ObjectModel Imports Microsoft.TeamFoundation.Client Imports Microsoft.TeamFoundation.Framework.Common Imports Microsoft.TeamFoundation.Framework.Client Module Module1 Sub Main(ByVal sArgs() As String) ' Connect to the Team Foundation Server ' Server is the name of the server running the application tier for Team Foundation Server ' Port is the port that the Team Foundation Server uses. The default port is 8080. ' VDir is the virtual path to the Team Foundation application. The default value is tfs. Dim tfsUri As Uri If sArgs.Length = 0 Then tfsUri = New Uri("https://Server:8080/tfs") Else tfsUri = New Uri(sArgs(1)) End If Dim configurationServer As New TfsConfigurationServer(tfsUri) configurationServer = TfsConfigurationServerFactory.GetConfigurationServer(tfsUri) ' Get the catalog of team project collections Dim collectionNodes As ReadOnlyCollection(Of CatalogNode) Dim gVar As Guid() = New Guid() {CatalogResourceTypes.ProjectCollection} collectionNodes = configurationServer.CatalogNode.QueryChildren(gVar, False, CatalogQueryOptions.None) ' List the team project collections For Each collectionNode In collectionNodes Dim collectionId As Guid = New Guid(collectionNode.Resource.Properties("InstanceID")) Dim teamProjectCollection As New TfsTeamProjectCollection(tfsUri) teamProjectCollection = configurationServer.GetTeamProjectCollection(collectionId) System.Console.WriteLine("Collection:" + teamProjectCollection.Name) ' Get a catalog of team projects for the collection Dim hVar As Guid() = New Guid() {CatalogResourceTypes.TeamProject} Dim projectNodes As ReadOnlyCollection(Of CatalogNode) projectNodes = collectionNode.QueryChildren(hVar, False, CatalogQueryOptions.None) ' List the team projects in the collection For Each projectNode In projectNodes System.Console.WriteLine(" Team Project: " + projectNode.Resource.DisplayName) Next Next End Sub End Module
追加の Team Foundation サービスの取得
追加のサービスにアクセスするには、抽象クラス TfsConnection で定義して TfsConfigurationServer および TfsTeamProjectCollection で実装する GetService メソッドを使用します。
TfsConfigurationServer クラスを使用する場合は、サーバー全体のサービスにアクセスします。 TfsTeamProjectCollection クラスを使用する場合は、チーム プロジェクト コレクションのサービスにアクセスします。 たとえば、TfsConfigurationServer の ITeamFoundationRegistry サービスでは、サーバーの登録済みプロパティが表示されます。 同じサービスを TfsTeamProjectCollection から取得すると、チーム プロジェクト コレクションの登録済みプロパティが表示されます。 チーム プロジェクト コレクションだけに適用されるサービスもあります。
サービス |
TfsConfigurationServer (サーバー レベル) |
TfsTeamProjectCollection (コレクション レベル) |
---|---|---|
別のユーザーの代わりに行動 (偽装)
Team Foundation Server に接続する場合、アプリケーションを実行する人とは異なる ID を持つユーザーの代理として行動できる偽装をサポートするメソッドを使用できます。 その接続に基づいて実行されるすべての操作は、偽装された ID を持つユーザーの代わりに実行されます。 たとえば、ユーザー A という ID でアプリケーションを実行しながら、ユーザー B を偽装した Team Foundation Server への接続を作成することができます。 ユーザー A がこの状態でソース コードの変更をチェックインする場合、変更セットはユーザー B が変更をチェックインしたと記録します。
Team Foundation の ID の使用
IdentityDescriptor オブジェクトを使用して Team Foundation Server に接続すると、偽装する ID を指定できます。 IdentityDescriptor は、Team Foundation が定義する ID を指定します。 この方法を使うと、パスワードを指定する必要がありません。 認証済み ID では、認証済み ID (ユーザー A) と偽装 ID (ユーザー B) が同じでない限り、[他のユーザーの代わりに要求] アクセス許可が必要です。
サーバー レベル |
---|
コレクション レベル |
---|
認証された資格情報の使用
ICredentials オブジェクトを使用して Team Foundation Server に接続すると、偽装する ID を指定できます。 この方法では特別な許可は必要ありませんが、ICredentials オブジェクトを作成するには ID のパスワードを取得できるようにする必要があります。
また、ICredentialsProvider の実装を指定して Team Foundation Server に接続すると、新しい資格情報のリクエストを処理できます。 システムは、ICredentials オブジェクトで指定された資格情報が操作を実行するために正常に認証または許可されない場合に、新しい資格情報をリクエストするために指定する ICredentialsProvider の実装を呼び出します。
ユーザーに資格情報のプロンプトを表示するには、UICredentialsProvider クラスを使用できます。ユーザーに新しい資格情報を入力するよう促すログオン ダイアログ ボックスが表示され、ICredentialsProvider が実装されます。
サーバー レベル |
---|
コレクション レベル |
---|
複数の手法を組み合わせて使用
Team Foundation の ID と認証済みの資格情報の両方を使って Team Foundation Server に接続できます。 たとえば、ユーザー A の資格情報でアプリケーションを実行している場合でも、ユーザー B の資格情報を使い、ユーザー C の IdentityDescriptor を指定して Team Foundation Server に接続することができます。 この場合、その接続を使用して行ったリクエストは、ユーザー B として認証されますが、ユーザー C の代わりに実行されます。 この方法が成功するには、ユーザー B は [他のユーザーの代わりに要求] アクセス許可が必要です。
サーバー レベル |
---|
コレクション レベル |
---|
その他のリソース
Team Foundation Server 上のチーム プロジェクトへの接続
Microsoft Web サイトの「TfsConnection、TfsConfigurationServer、および TfsTeamProjectCollection クラスの概要」
Microsoft Web サイトの「TFS 偽装とバージョン コントロール API の併用」。