Conectar con el servidor Team Foundation Server desde una aplicación de consola

Con este ejemplo, se puede establecer una conexión mediante programación a un servidor en el que se ejecuta Team Foundation para, luego, acceder a los proyectos de equipo que hay en dicho servidor. Si el ejemplo se modifica, se pueden usar los servicios descritos en la sección Getting Additional Team Foundation Services más adelante en este tema. También se pueden realizar acciones en nombre de otros usuarios mediante la suplantación, como se explica en la sección Acting on Behalf of Another User (Impersonation) más adelante en este tema.

En este tema

Ejemplo

Con el siguiente ejemplo, se puede obtener una lista de las colecciones de proyectos de equipo y de los proyectos de equipo que estas contienen.

Para usar este ejemplo

  1. Cree una aplicación de consola de C#.

  2. Agregue referencias a los siguientes ensamblados:

  3. Reemplace el contenido de Program.cs por el código que se muestra más adelante en este tema.

  4. En el código, reemplace Server, Port y VDir en la dirección URL que se usa para construir el objeto TfsConfigurationServer, de forma que dicha dirección URL remita a su servidor.

    Sugerencia

    Para asegurarse de que está usando la dirección URL adecuada, use Team Explorer para abrir un proyecto de equipo en el servidor y compruebe las propiedades de dirección URL del servidor.

    Propiedades del servidor 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
    

Obtener más servicios de Team Foundation

Se puede acceder a más servicios usando uno de los métodos GetService que la clase abstracta TfsConnection define y que tanto TfsConfigurationServer como TfsTeamProjectCollection implementan.

Cuando se usa la clase TfsConfigurationServer, se accede a los servicios de todo el servidor. Cuando se usa la clase TfsTeamProjectCollection, se accede a los servicios de la colección de proyectos de equipo. Por ejemplo, el servicio ITeamFoundationRegistry para TfsConfigurationServer suministra las propiedades registradas del servidor. El mismo servicio, obtenido de TfsTeamProjectCollection, suministra las propiedades registradas de una colección de proyectos de equipo. Algunos servicios son solo válidos para colecciones de proyectos de equipo.

Servicio

TfsConfigurationServer

(nivel de servidor)

TfsTeamProjectCollection

(nivel de colección)

ITeamFoundationRegistry

marca de verificación

marca de verificación

IIdentityManagementService

marca de verificación

marca de verificación

ITeamFoundationJobService

marca de verificación

marca de verificación

IPropertyService

marca de verificación

marca de verificación

IEventService

marca de verificación

marca de verificación

ISecurityService

marca de verificación

marca de verificación

ILocationService

marca de verificación

marca de verificación

TswaClientHyperlinkService

marca de verificación

marca de verificación

ITeamProjectCollectionService

marca de verificación

IAdministrationService

marca de verificación

marca de verificación

ICatalogService

marca de verificación

VersionControlServer

marca de verificación

WorkItemStore

marca de verificación

IBuildServer

marca de verificación

ITestManagementService

marca de verificación

ILinking

marca de verificación

ICommonStructureService3

marca de verificación

IServerStatusService

marca de verificación

IProcessTemplates

marca de verificación

Acciones en nombre de otro usuario (suplantación)

Cuando se conecta a Team Foundation Server, puede usar un método que admite la suplantación para poder actuar en nombre de una identidad distinta a la que ejecuta la aplicación. Cualquier operación que se realice con esa conexión lo hará en nombre de la identidad suplantada. Así, por ejemplo, la aplicación podría estar ejecutándose bajo la identidad del Usuario A, pero se podría crear una conexión a Team Foundation Server que suplante al Usuario B. Si el Usuario A protege un cambio en el código fuente en estas circunstancias, el conjunto de cambios registrará que el Usuario B ha protegido el cambio.

Usar una identidad de Team Foundation

Se puede usar un objeto IdentityDescriptor al conectarse a Team Foundation Server para especificar la identidad que se va a suplantar. IdentityDescriptor especifica una identidad que Team Foundation define. Cuando esta estrategia se usa, no es necesario indicar una contraseña. La identidad autenticada debe tener el permiso Realizar solicitudes en nombre de otros, excepto cuando las identidades autenticada (Usuario A) y suplantada (Usuario B) sean la misma.

Nivel de servidor

Nivel de colección

Usar credenciales autenticadas

Se puede usar un objeto ICredentials al conectarse a Team Foundation Server para especificar la identidad que se va a suplantar. En esta estrategia no se requieren permisos especiales, pero se debe poder obtener la contraseña de la identidad para crear el objeto ICredentials.

También se puede especificar una implementación de ICredentialsProvider al conectarse a Team Foundation Server para controlar las solicitudes de nuevas credenciales. El sistema llama a la implementación de ICredentialsProvider que se haya especificado para solicitar nuevas credenciales cuando las credenciales que el objeto ICredentials haya indicado no sirvan para autenticarse correctamente o para obtener permiso para realizar la operación.

Para pedir credenciales al usuario, se puede usar la clase UICredentialsProvider, que implementa ICredentialsProvider abriendo un cuadro de diálogo de inicio de sesión en el que solicita nuevas credenciales al usuario.

Nivel de servidor

Nivel de colección

Usar una combinación de técnicas

Se pueden usar tanto una identidad de Team Foundation como credenciales autenticadas al conectarse a Team Foundation Server. Así, por ejemplo, aunque la aplicación se ejecute con las credenciales del Usuario A, se podrían usar las credenciales del Usuario B y especificar un IdentityDescriptor para un Usuario C al conectarse a Team Foundation Server. En tal caso, las solicitudes que se efectúan mediante esa conexión se autentican como del Usuario B, pero se llevan a cabo en nombre del Usuario C. Para que esta estrategia funcione, el Usuario B debe tener el permiso Realizar solicitudes en nombre de otros.

Nivel de servidor

Nivel de colección

Recursos adicionales

Administrar colecciones de proyectos de equipo

Conectarse a proyectos de equipo en Team Foundation Server

Presentación de las clases TfsCollection, TfsConfigurationServer y TfsTeamProjectCollection en el sitio web de Microsoft.

Uso de la suplantación de TFS con API de control de versiones en el sitio web de Microsoft.