[현상]
Team Project를 생성하고, 곧바로 Team Build를 하려고 하면 다음과 같은 오류가 발생합니다.
System.Web.Services.Protocols.SoapException: Server was unable to process request. --> Microsoft.TeamFoundation.Server.SecurityObjectDoesNotExistException: TF50608: Unable to retrieve information for security object $PROJECT:vstfs:////Classification/TeamProject/7913adba-ccf7-4698-b274-2f4d9d5f6c01,it does not exist.
at Microsoft.TeamFoundation.Server.SqlResourceComponent.HandleException(SqlException ex)
at Microsoft.TeamFoundation.Server.SqlResourceComponent.execute(ExecuteType executeType, CommandBehavior behavior)
at Microsoft.TeamFoundation.Server.SqlResourceComponent.ExecuteReader()
at Microsoft.TeamFoundation.Server.AuthorizationComponent.SecurityReadIsPermitted(String objectId, String actionId, String userSid)
at Microsoft.TeamFoundation.Server.AuthorizationStoreAccessor.IsPermitted(String objectId, String actionId, String userSid)
at Microsoft.TeamFoundation.Server.AuthorizationService.IsPermitted(String objectId, String actionId, String userSid)
--- End of inner exception stack trace ---
사실, 다음과 같은 대화창이 뜹니다.
[해결 방법]
내부적으로 어떤 오류에 의해서 발생하는 지는 알 수 없습니다.
하지만, "저의 탁월한 감각^^;"으로 위의 오류를 없애는 방법을 알아낼 수 있었습니다.
일단, SoapException이라고 하니 TFS측의 Web Service가 그 처리를 담당했을 것입니다.
그런데, 보안 오류가 났으니 일단 TFS 서버에 있는 w3wp.exe 들 중의 하나가 보안 컨텍스트가 Team 프로젝트를 생성했을 때의 계정으로 설정된 것이므로, 해당 w3wp.exe 중에서 문제가 발생한 프로세스를 종료 시킨 후 다시 실행하면 될 거란 생각이 들었습니다.
Team Foundation Server의 웹 서비스 중에서 "Build" 가상 디렉토리는 "TFS AppPool" 을 사용하고 있고, 해당 AppPool의 구동 계정은 "TFSService"이어서, w3wp.exe 중에서 사용자 계정이 "TFSService" 인 것을 모두 강제 종료 또는 Recycling을 시키고 나면 정상적으로 Team Build 가 실행이 되어 집니다.