Condividi tramite


Connettersi a Team Foundation Server da un'applicazione console

L'esempio seguente consente di connettersi a livello di codice a un server che esegue Team Foundation, quindi di accedere ai progetti team presenti in tale server. Se si modifica l'esempio, è possibile usare i servizi descritti nella sezione Getting Additional Team Foundation Services più avanti in questo argomento. È anche possibile agire per conto di altri utenti mediante la funzione di rappresentazione, come descritto nella sezione Acting on Behalf of Another User (Impersonation) più avanti in questo argomento.

In questo argomento

Esempio

L'esempio seguente consente di elencare le raccolte di progetti team e i progetti team in esse contenuti.

Per usare questo esempio

  1. Creare un'applicazione console C#.

  2. Aggiungere riferimenti agli assembly riportati di seguito:

  3. Sostituire il contenuto di Program.cs con il codice riportato più avanti in questo argomento.

  4. In tale codice sostituire Server, Port e VDir nell'URL usato per costruire l'oggetto TfsConfigurationServer in modo tale che l'URL faccia riferimento al server.

    Suggerimento

    Per accertarsi che l'URL sia corretto, usare Team Explorer per aprire un progetto team nel server e verificare le proprietà dell'URL del server.

    Proprietà di 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
    

Ottenere servizi aggiuntivi di Team Foundation

È possibile accedere ai servizi aggiuntivi mediante uno dei metodi GetService definiti dalla classe astratta TfsConnection e implementati da TfsConfigurationServer e TfsTeamProjectCollection.

Quando si usa la classe TfsConfigurationServer, è possibile accedere ai servizi per l'intero server. Quando si usa la classe TfsTeamProjectCollection, è possibile accedere ai servizi per la raccolta di progetti team. Ad esempio, il servizio ITeamFoundationRegistry per TfsConfigurationServer fornisce le proprietà registrate del server. Lo stesso servizio che viene acquisito da TfsTeamProjectCollection fornisce le proprietà registrate di una raccolta di progetti team. Alcuni servizi vengono applicati solo alle raccolte di progetti team.

Servizio

TfsConfigurationServer

(a livello di server)

TfsTeamProjectCollection

(a livello di raccolta)

ITeamFoundationRegistry

segno di spunta

segno di spunta

IIdentityManagementService

segno di spunta

segno di spunta

ITeamFoundationJobService

segno di spunta

segno di spunta

IPropertyService

segno di spunta

segno di spunta

IEventService

segno di spunta

segno di spunta

ISecurityService

segno di spunta

segno di spunta

ILocationService

segno di spunta

segno di spunta

TswaClientHyperlinkService

segno di spunta

segno di spunta

ITeamProjectCollectionService

segno di spunta

IAdministrationService

segno di spunta

segno di spunta

ICatalogService

segno di spunta

VersionControlServer

segno di spunta

WorkItemStore

segno di spunta

IBuildServer

segno di spunta

ITestManagementService

segno di spunta

ILinking

segno di spunta

ICommonStructureService3

segno di spunta

IServerStatusService

segno di spunta

IProcessTemplates

segno di spunta

Operare per conto di un altro utente (rappresentazione)

Quando ci si connette a Team Foundation Server, è possibile usare un metodo che supporti la funzione di rappresentazione per agire per conto di un'identità diversa da quella che esegue l'applicazione. Tutte le operazioni eseguite in base a tale connessione verranno eseguite per conto dell'identità rappresentata. Ad esempio, l'applicazione potrebbe essere eseguita con l'identità dell'Utente A ma creare una connessione a Team Foundation Server che rappresenti l'Utente B. Se l'Utente A archivia una modifica al codice sorgente in queste condizioni, l'insieme di modifiche registrerà che la modifica è stata archiviata dall'Utente B.

Uso di un'identità di Team Foundation

È possibile usare un oggetto IdentityDescriptor quando ci si connette a Team Foundation Server per specificare l'identità da rappresentare. L'oggetto IdentityDescriptor specifica un'identità definita da Team Foundation. Quando si usa questo approccio, non è necessario specificare una password. L'identità autenticata deve avere l'autorizzazione Effettuare richieste per conto di un altro utente tranne quando l'identità autenticata (Utente A) e l'identità rappresentata (Utente B) sono uguali.

A livello di server

A livello di raccolta

Uso delle credenziali autenticate

È possibile usare un oggetto ICredentials quando ci si connette a Team Foundation Server per specificare l'identità da rappresentare. Questo approccio non richiede autorizzazioni speciali ma è necessario poter ottenere la password dell'identità per creare l'oggetto ICredentials.

È anche possibile specificare un'implementazione di ICredentialsProvider quando ci si connette a Team Foundation Server per gestire le richieste di nuove credenziali. Il sistema chiama l'implementazione di ICredentialsProvider specificata per richiedere le nuove credenziali quando le credenziali specificate dall'oggetto ICredentials non vengono autenticate o autorizzate correttamente per eseguire l'operazione.

Per richiedere all'utente le credenziali, usare la classe UICredentialsProvider, che implementa ICredentialsProvider, per visualizzare una finestra di dialogo di accesso in cui viene richiesta l'immissione delle nuove credenziali.

A livello di server

A livello di raccolta

Uso di una combinazione di tecniche

È possibile usare sia un'identità di Team Foundation che le credenziali autenticate quando ci si connette a Team Foundation Server. Ad esempio, l'applicazione potrebbe essere eseguita con le credenziali dell'Utente A ma si potrebbero usare le credenziali dell'Utente B e specificare un oggetto IdentityDescriptor per l'Utente C quando ci si connette a Team Foundation Server. In questo caso, le richieste effettuate usando tale connessione vengono autenticate come Utente B ma eseguite per conto dell'Utente C. Per il corretto funzionamento di questo approccio, l'Utente B deve avere l'autorizzazione Effettuare richieste per conto di un altro utente.

A livello di server

A livello di raccolta

Risorse aggiuntive

Gestire le raccolte di progetti team

Connettersi ai progetti team in Team Foundation Server

Introduzione alle classi TfsConnection, TfsConfigurationServer e TfsTeamProjectCollection nel sito Web Microsoft

Uso della funzione di rappresentazione di TFS con le API del controllo della versione nel sito Web Microsoft