2012-02-06 11 views
6

Ho provato due modi per connettermi al workitemstore per il server TFS in esecuzione. Il tentativo A era di connettersi al server di configurazione e utilizzare il metodo GetService<WorkItemStore>(). Questo restituisce sempre null.Come ci si connette correttamente all'archivio del workitem TFS 2010?

Il tentativo B era di connettersi a TfsTeamProjectCollection e utilizzare il metodo GetService<WorkItemStore>() o passare la raccolta del progetto nel costruttore WorkItemStore. Nel tentativo B, viene visualizzata un'eccezione che indica "Errore HRESULT E_FAIL restituito da una chiamata a un componente COM." L'unica informazione che riesco a trovare sembra indicare qualche problema di autorizzazione, ma ho confermato che sono autenticato come utente con accesso in lettura all'intera raccolta del progetto e che mi connetto e intervengo appropriatamente tramite l'anteprima dello svideo di VS 2011.

Ecco come sto collegando ...

public TfsConfigurationServer GetConfigurationServer() 
    { 
     Uri tfsUri = new Uri(configs.TfsUri); 
     TfsConfigurationServer server = TfsConfigurationServerFactory.GetConfigurationServer(tfsUri, credProvider); 
     server.Authenticate(); 
     if (server.HasAuthenticated == false) 
      throw new InvalidOperationException("You can't authenticate against the tfs instance."); 
     return server; 
    } 

    public TfsTeamProjectCollection GetProjectCollectionInstance(string projectCollectionName) 
    { 
     Uri tfsUri = new Uri(configs.TfsUri + "/" + projectCollectionName);   
     TfsTeamProjectCollection collection = TfsTeamProjectCollectionFactory.GetTeamProjectCollection(tfsUri, credProvider); 
     collection.Authenticate(); 
     if (collection.HasAuthenticated == false) 
      throw new InvalidOperationException("You can't authenticate against the tfs instance."); 
     return collection; 
    } 

ed ecco come sto cercando di ottenere il WorkItemStore (codice di stupido per illustrare il problema) ...

public WorkItemProvider() 
    { 
     if (workItems == null) 
      workItems = ServerProvider.ServerInstance.GetService<WorkItemStore>(); 
     if (workItems == null) 
      workItems = ServerProvider.ProjectCollectionInstance.GetService<WorkItemStore>(); 
     if (workItems == null) 
      workItems = new WorkItemStore(ServerProvider.ProjectCollectionInstance); 
     if (workItems == null) 
      throw new NullReferenceException("Couldn't load work item store."); 
    } 

I Non sono sullo stesso dominio del server, ma sto autenticando come utente di un dominio con ICredentialsProvider e ho confermato che sono autenticato come tale utente. Qualsiasi suggerimento sarebbe utile.

+0

Ulteriori informazioni: Lo stesso codice funziona bene su un computer nel nostro dominio utilizzando l'autenticazione di Windows e la rappresentazione. Immagino di non poterlo fare al di fuori del dominio? Posso da Visual Studio, quindi non ha senso. Forse se potessi impersonare l'utente del dominio anche se non sono nel dominio? – sonicblis

risposta

2

Verificare se questo fa quello che vi serve:

using System; 
using Microsoft.TeamFoundation.Client; 
using Microsoft.TeamFoundation.WorkItemTracking.Client; 

namespace GetsWorkItem 
{ 
    class Program 
    { 
     static void Main() 
     { 
      TfsTeamProjectCollection teamProjectCollection = TfsTeamProjectCollectionFactory.GetTeamProjectCollection(new Uri("http://<TFS>:8080/tfs/<COLLECTION>")); 
      WorkItemStore workItemStore= (WorkItemStore) teamProjectCollection.GetService(typeof (WorkItemStore)); 

      WorkItem workItem = workItemStore.GetWorkItem(1234); 
     } 
    } 
} 
+1

Funziona in un'app console (una volta aggiunta l'autenticazione), non funziona nella mia app Web. Stesso errore del tentativo B nella mia domanda. – sonicblis

+0

Mi dispiace, non ha funzionato per te – pantelif

0

credo this article potrebbe essere in grado di rispondere alla tua domanda. Si dice che se si istanzia l'WorkItemStore in modo leggermente diverso, si otterrà un'eccezione diversa:

System.TypeInitializationException: The type initializer for ‘Microsoft.TeamFoundation.WorkItemTracking.Client.WorkItemStore’ threw an exception. —> System.IO.FileLoadException: Mixed mode assembly is built against version ‘v2.0.50727′ of the runtime and cannot be loaded in the 4.0 runtime without additional configuration information.

La correzione è una semplice modifica web.config, aggiungendo la seguente:

<?xml version="1.0"?> 
<configuration> 
    <startup useLegacyV2RuntimeActivationPolicy="true"> 
     <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/> 
    </startup> 
</configuration> 

Spero che questo aiuti! Ha funzionato per me quando ricevevo lo stesso errore.

Problemi correlati