Я полностью в тупике от этого и бесконечного поиска google/stackoverflow не помог. Я использую SDK 2012 Visual Studio для подключения к TFS 2012 и запрашиваю хранилище рабочих элементов. В приведенном ниже коде отлично работает как консольное приложение, так и приложение ASP.NET MVC, которое делает не аутентификацией, либо в любом сценарии, запущенном на моем локальном компьютере. Тем не менее, я получаю COMException
, когда пытаюсь создать экземпляр WorkItemStore из приложения MVC, которое было развернуто на сервере, и использует (Windows) аутентификацию.TFS WorkItemStore вызывает COMException в приложении ASP.NET MVC при использовании аутентификации
Не имеет значения, если у меня есть элемент <authentication mode="Windows" />
в моем web.config или нет; пока на моем контроллере или любом из его методов действия есть атрибут [Authorize]
, я получаю исключение, как только вызывается последняя строка кода ниже. Если я удалю атрибут [Authorize]
, исключение не произойдет. Если я вызываю код ниже в какой-то момент до код вызова, украшенный [Authorize]
, исключение не возникает. Как-то использование AuthorizeAttibute вызывает это исключение.
Любые идеи о том, как разрешить это? Или, по крайней мере, для более точной идентификации реальной проблемы с корнем? Я бы очень хотел понять, что здесь происходит.
Uri tfsAddress = new Uri("http://tfs-address:8080/tfs/DefaultCollection");
var myCreds = new NetworkCredential("userName", "password", "domain");
var tfsCreds = new TfsClientCredentials(new WindowsCredential(myCreds), false);
var defaultCollection = new TfsTeamProjectCollection(tfsAddress, tfsCreds);
defaultCollection.EnsureAuthenticated();
var store = defaultCollection.GetService<WorkItemStore>(); // <-- EXCEPTION
Стек трассировки:
[COMException (0x80004005):. Ошибка HRESULT E_FAIL был возвращен из вызова к COM-компонента]
Microsoft.TeamFoundation.WorkItemTracking.Client.DataStore.DataStoreNative .BeginDataStoreInit (IntPtr ручка, String defaultCachePath, String INSTANCEID, Int32 cacheVersion) +0
Microsoft.TeamFoundation.WorkItemTracking.Client.DataStore.Datastore.BeginDataStoreInit (String defaultCachePath, String INSTANCEID, В T32 cacheVersion) +56
Microsoft.TeamFoundation.WorkItemTracking.Client.WorkItemStore.InitializeInternal() +598
Microsoft.TeamFoundation.WorkItemTracking.Client.WorkItemStore.Microsoft.TeamFoundation.Client.ITfsTeamProjectCollectionObject.Initialize (TfsTeamProjectCollection teamProjectCollection) +23
Microsoft.TeamFoundation.Client.TfsTeamProjectCollection.InitializeTeamFoundationObject (String FULLNAME, объект экземпляра) +43
Microsoft.TeamFoundation.Client.TfsConnection.CreateServiceInstance (монтаж Монтаж , Строка FULLNAME) +91
Microsoft.TeamFoundation.Client.TfsConnection.GetServiceInstance (тип ServiceType, serviceInstance Объект) +200
Microsoft.TeamFoundation.Client.TfsTeamProjectCollection.GetServiceInstance (тип ServiceType, serviceInstance Объект) +439
Microsoft.TeamFoundation.Client.TfsConnection.GetService (тип ServiceType) +241
Microsoft.TeamFoundation.Client.TfsConnection.GetService() +58
Ник, вы сохранили Авторизованный атрибут на своем контроллере? Как вы настроили аутентификацию IIS, то есть спросить, какие модули включены? Я получаю ту же ошибку и пока не нашел решение. Я использую олицетворение ASP.NET и проверку подлинности Windows. – MADCookie
Я сохранил 'AuthorizeAttribute' на моем контроллере, да. Я только что проверил IIS и (что удивительно), единственным модулем является «Анонимная аутентификация». Мы переместили наш IIS на новый сервер, так как я разместил этот вопрос. Я почти уверен, что раньше у меня была активирована «Аутентификация Windows», но в любом случае сайт работает правильно, поэтому я не возился с ним. :-) –