2013-01-10 3 views
0

개발 시스템에서 실행중인 TFS 2012 및 VS 2012로 업데이트 된 2008 서버가 실행됩니다. 이 솔루션은 MSBuild를 사용하여 서버에 테스트를 배포하고 실행합니다. 모든 테스트는 개발 상자를 통과하지만 로컬에 배포 된 WCF 서버 (IIS에서 호스팅 됨)를 호출하지 않는 테스트 만 실패합니다. 모든 서비스 호출의 예외는 다음과 같습니다.빌드 서버에서 단위 테스트에서 WCF 호출이 실패 함

>  Test method TestProject.TestClass.TestMethod threw exception: 
>  System.ServiceModel.CommunicationObjectFaultedException: The communication object, System.ServiceModel.Channels.ServiceChannel, 
> cannot be used for communication because it is in the Faulted state. 
>  
>  Server stack trace: 
>  at System.ServiceModel.Channels.CommunicationObject.Close(TimeSpan 
> timeout) 
>  at System.ServiceModel.Channels.ServiceChannel.System.IDisposable.Dispose() 
>  Exception rethrown at [0 
enter code here 

NETWORK SERVICE에 적절한 권한이 있습니다. 전원이 켜져 있습니다. 이견있는 사람?

+0

기술적으로 웹 서비스를 호출하는 경우, 이것들은 단위 테스트가 아니라고 주장 할 수 있습니다.하지만 그것은 요점입니다. WCF 추적을 살펴 보았습니까? 설정 파일의 WCF 추적 기능을 켜서 무엇이 있는지 알아보십시오. 또한 WCF를 타기 위해 어떤 URL을 사용하고 있습니까? localhost? 어쩌면 루프백 일 수도 있고 DNS 결의안 일 수도 있습니다. –

+0

동의어, 이들은 실제로 단위 테스트가 아닙니다. 그래서 좀 더 발전했습니다. MSTest가 내 계정에서 로컬로 실행되지만 네트워크 서비스로 실행되는 빌드 서버에서는 사용 권한 문제 인 것 같습니다. WCF 추적은 SecurityNegotiationException을 표시합니다. 내 질문에 지금은 .... .... _ 어떤 권한이 없습니까? _ – Ian

답변

1

해결되었습니다. 의 작은 배경 설정 :

해당 서비스는 SQL 멤버 자격 공급자 및 서비스 인증서를 사용하는 사용자 이름 인증으로 구성됩니다. 권한 부여는 ASP.NET 역할 공급자를 사용하여 수행됩니다. 사용되는 바인딩은 메시지 보안이 설정되고 사용자 이름으로 구성된 NetTcpBinding입니다.

문제은 다음과 같이 나타났습니다. 내 로컬 상자의 MSBuild 및 MSTest가 내 계정으로 실행되었습니다. 여기에 Authorize에 사용 된 로컬에서 생성 된 cert가 Current User \ Trusted People에 추가되었습니다. 그러나 MSBuild와 MSTest가 NETWORK SERVICE에서 실행 된 이후 빌드 상자에서 WCF는 핸드 셰이크를 거부했습니다. 이 문제의 해결책은 로컬 컴퓨터 \ 신뢰할 수있는 사용자 저장소에 테스트 인증서를 추가하는 것이 었습니다.

+0

답변으로 표시해야합니다. –

+0

마이크 감사합니다. – Ian

관련 문제