Я пробовал два способа подключения к workitemstore для сервера TFS, в котором мы работаем. Попытка A заключалась в подключении к серверу конфигурации и использовании метода GetService<WorkItemStore>()
. Это всегда возвращает null.Как успешно подключиться к хранилищу Workstem TFS 2010?
Попытка B должна была подключиться к TfsTeamProjectCollection и использовать метод GetService<WorkItemStore>()
или передать коллекцию проекта в конструктор WorkItemStore. В попытке B я получаю исключение: «Ошибка HRESULT E_FAIL была возвращена из вызова COM-компонента». Единственная информация, которую я могу найти на этом, кажется, указывает на некоторые проблемы с разрешениями, но я подтвердил, что я аутентифицирован как пользователь с доступом для чтения ко всей коллекции проектов, и я подключаюсь и управляю соответствующим образом через предварительный просмотр VS 2011.
Вот как я подключении ...
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.");
}
I 'm не в том же домене, что и сервер, но я аутентифицируюсь как пользователь домена с помощью ICredentialsProvider, и я подтвердил, что я аутентифицирован как этот пользователь. Любые указатели были бы полезны.
Дополнительная информация: тот же код отлично работает на компьютере в нашем домене, используя windows auth и олицетворение. Думаю, я не могу сделать это из-за пределов домена? Я могу из Visual Studio, так что это не имеет смысла. Может быть, если я смогу олицетворять пользователя домена, даже если я не в домене? – sonicblis