Я пробовал два способа подключиться к workitemstore для нашего сервера TFS. Попытка A заключалась в подключении к серверу конфигурации и использовании метода GetService
. Это всегда возвращает ноль.
Попытка B заключалась в том, чтобы подключиться к TfsTeamProjectCollection и использовать метод GetService
или передать коллекцию проекта в конструктор WorkItemStore. При попытке B я получаю исключение: «Ошибка HRESULT E_FAIL была возвращена из вызова компонента COM.«Единственная информация, которую я могу найти, похоже, указывает на некоторые проблемы с разрешениями, но я подтвердил, что аутентифицирован как пользователь с доступом для чтения ко всей коллекции проектов, и я подключаюсь и вмешиваюсь соответствующим образом через предварительную версию VS 2011 dev.
Вот как я подключаюсь ...
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;
}
и вот как я пытаюсь получить WorkItemStore (глупый код для иллюстрации проблемы) ...
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.");
}
Я не нахожусь в том же домене, что и сервер, но я аутентифицируюсь как пользователь домена с помощью ICredentialsProvider, и я подтвердил, что аутентифицирован как этот пользователь. Любые указатели будут полезны.