Herstellen einer Verbindung mit Team Foundation Server von einer Konsolenanwendung aus

Anhand des folgenden Beispiels können Sie programmgesteuert eine Verbindung mit einem Server herstellen, auf dem Team Foundation ausgeführt wird, und dann auf die Teamprojekte auf diesem Server zugreifen. Wenn Sie das Beispiel entsprechend ändern, können Sie die Dienste nutzen, die weiter unten in diesem Thema unter Getting Additional Team Foundation Services beschrieben werden. Sie können auch im Namen anderer Personen handeln, indem Sie einen Identitätswechsel wie weiter unten im Thema unter Acting on Behalf of Another User (Impersonation) beschrieben vornehmen.

In diesem Thema

Beispiel

Verwenden Sie das folgende Beispiel, um die Teamprojektauflistungen und die Teamprojekte aufzulisten, die diese enthalten.

So verwenden Sie dieses Beispiel

  1. Erstellen Sie eine C#- Konsolenanwendung.

  2. Fügen Sie Verweise auf die folgenden Assemblys hinzu:

  3. Ersetzen Sie den Inhalt von Program.cs durch den Code, der weiter unten im Thema aufgeführt wird.

  4. In diesem Code ersetzen Sie Server, Port und VDir in der URL, die für die Erstellung des TfsConfigurationServer-Objekts verwendet wird, sodass die URL auf den Server verweist.

    Tipp

    Um sicherzustellen, dass Sie die richtige URL verwenden, öffnen Sie auf dem Server ein Teamprojekt mit Team Explorer, und prüfen Sie die URL-Eigenschaften auf dem Server.

    Team Foundation Server-Eigenschaften: 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
    

Abrufen von zusätzlichen Team Foundation-Diensten

Sie können zusätzliche Dienste abrufen, indem Sie eine der GetService-Methoden verwenden, die von der abstrakten Klasse TfsConnection definiert und von TfsConfigurationServer und TfsTeamProjectCollection implementiert werden.

Wenn Sie die Klasse TfsConfigurationServer verwenden, rufen Sie die Dienste für den gesamten Server ab. Wenn Sie die Klasse TfsTeamProjectCollection verwenden, rufen Sie die Dienste für die Teamprojektauflistung ab. Der ITeamFoundationRegistry-Dienst für TfsConfigurationServer liefert beispielsweise registrierte Eigenschaften des Servers. Derselbe Dienst aus TfsTeamProjectCollection liefert Eigenschaften einer Teamprojektauflistung. Einige Dienste gelten nur für Teamprojektauflistungen.

Dienst

TfsConfigurationServer

(Serverebene)

TfsTeamProjectCollection

(Auflistungsebene)

ITeamFoundationRegistry

Häkchen

Häkchen

IIdentityManagementService

Häkchen

Häkchen

ITeamFoundationJobService

Häkchen

Häkchen

IPropertyService

Häkchen

Häkchen

IEventService

Häkchen

Häkchen

ISecurityService

Häkchen

Häkchen

ILocationService

Häkchen

Häkchen

TswaClientHyperlinkService

Häkchen

Häkchen

ITeamProjectCollectionService

Häkchen

IAdministrationService

Häkchen

Häkchen

ICatalogService

Häkchen

VersionControlServer

Häkchen

WorkItemStore

Häkchen

IBuildServer

Häkchen

ITestManagementService

Häkchen

ILinking

Häkchen

ICommonStructureService3

Häkchen

IServerStatusService

Häkchen

IProcessTemplates

Häkchen

Annehmen der Identität eines anderen Benutzers (Identitätswechsel)

Wenn Sie eine Verbindung mit Team Foundation Server herstellen, können Sie eine Methode verwenden, die Identitätswechsel unterstützt. Auf diese Weise können Sie eine andere Identität annehmen, als in der Anwendung ausgeführt wird. Alle auf dieser Verbindung basierenden Operationen werden dann mit der angenommen Identität ausgeführt. Die Anwendung könnte beispielsweise mit der Identität von User A ausgeführt werden, aber eine Verbindung mit Team Foundation Server mit der angenommenen Identität von User B herstellen. Wenn User A unter diesen Bedingungen eine Änderungen am Quellcode eincheckt, wird im Changeset verzeichnet, dass User B die Änderungen eingecheckt hat.

Verwenden einer Team Foundation-Identität

Sie können ein IdentityDescriptor-Objekt verwenden, wenn Sie eine Verbindung zu Team Foundation Server herstellen, um die neue Identität anzugeben. Der IdentityDescriptor gibt eine Identität an, die von Team Foundation definiert wird. Wenn Sie diese Strategie verwenden, müssen Sie kein Kennwort angeben. Die authentifizierte Identität muss über die Berechtigung Anforderungen im Auftrag von anderen Benutzern einreichen verfügen, es sei denn, dass die authentifizierte (User A) und die angenommene (User B) Identität übereinstimmen.

Serverebene

Auflistungsebene

Verwenden authentifizierter Anmeldeinformationen

Sie können ein ICredentials-Objekt verwenden, wenn Sie eine Verbindung zu Team Foundation Server herstellen, um die neue Identität anzugeben. Für diese Vorgehensweise sind keine speziellen Berechtigungen erforderlich, Sie müssen jedoch über das Kennwort der Identität verfügen, um das Objekt ICredentials zu erstellen.

Sie können auch eine Implementierung von ICredentialsProvider angeben, wenn Sie eine Verbindung zu Team Foundation Server herstellen, um Anforderungen für neue Anmeldeinformationen zu bearbeiten. Das System ruft die Implementierung von ICredentialsProvider auf, die Sie für die Anforderung neuer Anmeldeinformationen angeben, wenn die vom ICredentials-Objekt angegebenen Anmeldeinformationen für die Ausführung der Operation nicht erfolgreich authentifiziert oder autorisiert sind.

Um den Benutzer zur Eingabe der Anmeldeinformationen aufzufordern, können Sie die UICredentialsProvider-Klasse verwenden, die ICredentialsProvider implementiert, sodass ein Anmeldedialogfeld zur Eingabe neuer Anmeldeinformationen angezeigt wird.

Serverebene

Auflistungsebene

Verwenden einer Kombination verschiedener Verfahren

Sie können sowohl eine Team Foundation-Identität als auch authentifizierte Anmeldeinformationen verwenden, wenn Sie eine Verbindung zu Team Foundation Server herstellen. Beispielsweise wird die Anwendung mit den Anmeldeinformationen für User A ausgeführt, Sie verwenden jedoch Anmeldeinformationen für User B und geben einen IdentityDescriptor für User C an, wenn Sie eine Verbindung zu Team Foundation Server herstellen. In diesem Fall werden Anforderungen, die mit dieser Verbindung vorgenommen werden, mit User B authentifiziert, aber im Namen von User C ausgeführt. Damit diese Vorgehensweise erfolgreich ist, muss User B über die Berechtigung Anforderungen im Auftrag von anderen Benutzern einreichen verfügen.

Serverebene

Auflistungsebene

Zusätzliche Ressourcen

Verwalten von Teamprojektauflistungen

Herstellen einer Verbindung mit Teamprojekten in Team Foundation Server

Einführung in die TfsCollection-, TfsConfigurationServer- und TfsTeamProjectCollection-Klassen auf der Microsoft-Website

TFS-Identitätswechsel mit Version Control-APIs auf der Microsoft-Website.