Я пробовал два способа подключения к рабочему хранилищу сервера TFS, на котором мы работаем. Попытка А состояла в том, чтобы подключиться к серверу конфигурации и использовать метод GetService<WorkItemStore>()
. Это всегда возвращает ноль.
Попытка B состояла в том, чтобы подключиться к TfsTeamProjectCollection и использовать метод GetService<WorkItemStore>()
или передать коллекцию проектов в конструктор 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, и я подтвердил, что я аутентифицирован как этот пользователь. Любые указатели будут полезны.