次の方法で共有


コンソール アプリケーションからの Team Foundation Server への接続

Team Foundation を実行しているサーバーにプログラムで接続して、次の例を使ってそのサーバーにあるチーム プロジェクトにアクセスできます。 例を変更した場合、このトピックの後半の Getting Additional Team Foundation Services で説明されているサービスを使用できます。 また、このトピックの後半の Acting on Behalf of Another User (Impersonation) で説明されているように、偽装を使って他の人の代わりに行動することもできます。

このトピックの内容

次の例を使うと、チーム プロジェクト コレクションおよびそこに含まれるチーム プロジェクトをリストにすることができます。

この例を使うには

  1. C# コンソール アプリケーションを作成します。

  2. 次のアセンブリへの参照を追加します。

  3. Program.cs のコンテンツを、このトピックの後半に示すコードで置き換えます。

  4. そのコードで、TfsConfigurationServer オブジェクトを構築するために使う URL の Server、Port、および VDir を置き換えて、ご使用のサーバーをその URL が参照するようにします。

    ヒント

    正しい URL を使用していることを確認するために、チーム エクスプローラー を使ってサーバーでチーム プロジェクトを開き、サーバーの URL プロパティを確認します。

    Team Foundation Server のプロパティ: 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 クラスを使用する場合は、チーム プロジェクト コレクションのサービスにアクセスします。 たとえば、TfsConfigurationServerITeamFoundationRegistry サービスでは、サーバーの登録済みプロパティが表示されます。 同じサービスを TfsTeamProjectCollection から取得すると、チーム プロジェクト コレクションの登録済みプロパティが表示されます。 チーム プロジェクト コレクションだけに適用されるサービスもあります。

サービス

TfsConfigurationServer

(サーバー レベル)

TfsTeamProjectCollection

(コレクション レベル)

ITeamFoundationRegistry

チェック マーク

チェック マーク

IIdentityManagementService

チェック マーク

チェック マーク

ITeamFoundationJobService

チェック マーク

チェック マーク

IPropertyService

チェック マーク

チェック マーク

IEventService

チェック マーク

チェック マーク

ISecurityService

チェック マーク

チェック マーク

ILocationService

チェック マーク

チェック マーク

TswaClientHyperlinkService

チェック マーク

チェック マーク

ITeamProjectCollectionService

チェック マーク

IAdministrationService

チェック マーク

チェック マーク

ICatalogService

チェック マーク

VersionControlServer

チェック マーク

WorkItemStore

チェック マーク

IBuildServer

チェック マーク

ITestManagementService

チェック マーク

ILinking

チェック マーク

ICommonStructureService3

チェック マーク

IServerStatusService

チェック マーク

IProcessTemplates

チェック マーク

別のユーザーの代わりに行動 (偽装)

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 の併用」。