Кажется, у нас есть проблема с установкой Team Foundation Server 2010, которая выдает ошибку при запросе определенных пользователей. Если мы включим их в фильтр «AssignedTo», запрос мгновенно выдаст ошибку:

TF237161: Тайм-аут работы сервера или сервер не отвечает. Попробуйте снова.

Для других пользователей это работает нормально, и TFS, назначенные этим проблемным пользователям, возвращаются в результатах рабочих запросов. Я проверил, и это не похоже на проблему с разрешением. В прошлом году мы перешли с Team Foundation Server 2008 на TFS 2010, но люди, на которых это влияет, все равно думают, что это происходило до этого.

У кого-нибудь есть идеи, с чего начать устранение неполадок? У меня есть полный доступ к серверу и базе данных, и я начал пытаться реплицировать запрос в SQL, чтобы увидеть, является ли это ошибкой в базе данных, но пока не очень далеко.

Если у кого-то есть какие-либо предложения, они будут очень благодарны! Спасибо

3 ответа3

2

В конце концов мне удалось найти источник проблемы! Оказывается, что по неизвестным причинам затронутые пользователи появлялись более одного раза в таблице Constants (на основе их имени, хранящейся в столбце DisplayPart ), которая находится в нашей базе данных TFS TfsDefaultCollection . Этот запрос выделил все записи с DisplayName :

SELECT * FROM Tfs_DefaultCollection.dbo.Constants
WHERE DisplayPart IN
(
    SELECT DisplayPart FROM dbo.Constants 
    GROUP BY DisplayPart
    HAVING COUNT(ConstID) > 1
)
ORDER BY DisplayPart ASC

Один запрос, который TFS использует при запросе элементов TFS, извлекает ConstID пользователей из этой таблицы и работает только тогда, когда их имена уникальны:

declare @P3_1 int
select @P3_1 = ConstID from dbo.[Constants] where DisplayPart = @P3
if (@@rowcount > 1)
begin
        raiserror(600174, 16, 1) with seterror, nowait
        return
end
set @P3_1 = isnull(@P3_1,-2147483648);

Таким образом, поскольку они появлялись более одного раза, запрос завершился ошибкой. Таким образом, чтобы решить эту проблему, мы переименовали дублирующиеся константы с последним ConstID во что-то другое (мы добавили ?до конца) и эй престо! Это снова сработало.

Если я когда-нибудь узнаю, почему это произошло, я выложу обновление. В то же время я надеюсь, что это полезно для тех, кто испытывает ту же раздражающую проблему

1

Попробуйте эти инструкции, чтобы получить подробную информацию о том, что происходит на вашем TFS-сервере.

0

Обратите внимание, что вы никогда не должны напрямую манипулировать такими данными - это приведёт вашу систему в состояние, которое очень трудно поддерживать группе продуктов TFS. В некоторых случаях на самом деле ожидаются повторяющиеся отображаемые имена - обычно, когда два пользователя в разных доменах синхронизируются в TFS с общим отображаемым именем (например, DOMAIN1\user и DOMAIN2\user оба имеют отображаемое имя 'user').

Запрос отслеживания рабочих элементов, который вы отметили выше, оптимизирован для случая, когда в системе нет повторяющихся отображаемых имен. Как правило, случается так, что ошибка, возникающая из-за включенного вами фрагмента SQL, приведет к созданию строго типизированного исключения на сервере. Это исключение перехватывается, а затем генерируется менее оптимальный пакет SQL для обработки повторяющегося случая отображаемого имени. Очевидно, что это не очень хорошая модель, и мы планируем ее исправить в следующем выпуске. На данный момент, однако, вот как все работает здесь.

При всех этих настройках основная причина вашей проблемы, вероятно, заключается в том, что на вашем экземпляре SQL неправильно установлены сообщения об ошибках. В этом случае возникшая ошибка не будет должным образом преобразована в строго типизированное исключение, ожидаемое серверным кодом, и второй менее оптимальный пакет SQL никогда не будет сгенерирован, что приведет к ошибке, которую вы видели ... Если вы исправите сообщение об ошибке установки на своем экземпляре SQL, проблема должна быть устранена, и ваши запросы должны снова возвращать соответствующие результаты для пользователей с неоднозначными отображаемыми именами.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .