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.
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