2009-09-11 6 views
4

단위 테스트 집합과 TFSBuild의 통합 빌드 내에서 빌드 된 프로젝트가있는 WCF ServiceHost의 인스턴스를 만드는 것과 관련된 문제가 있습니다. 단위 테스트에 사용되는 코드이다단위 테스트 WCF ServiceHost가 TFS 통합 빌드에서 실패 함

가 직접 코드를 통해 생성 될 수 있지만, 다음과 같은 세부 사항이 포함 된 .config 파일에 위치
[TestMethod] 
public void Service_Can_Be_Dynamically_Hosted() 
{ 
    ServiceHost host = new ServiceHost(typeof(DiscoveryService)); 

    host.Open(); 
    host.Close(); 
} 

서비스의 구성 :

<system.serviceModel> 
    <behaviors> 
     <serviceBehaviors> 
     <behavior name="TappingBoard.Core.Network.DiscoveryServiceBehavior"> 
      <serviceMetadata httpGetEnabled="true" /> 
      <serviceDebug includeExceptionDetailInFaults="true" /> 
     </behavior> 
     </serviceBehaviors> 
    </behaviors> 

    <services> 
     <service behaviorConfiguration="TappingBoard.Core.Network.DiscoveryServiceBehavior" 
       name="TappingBoard.Core.Network.Services.DiscoveryService"> 
     <endpoint address="" binding="wsHttpBinding" contract="TappingBoard.Core.Network.Services.IDiscoveryService"> 
      <identity> 
      <dns value="localhost" /> 
      </identity> 
     </endpoint> 
     <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" /> 
     <host> 
      <baseAddresses> 
      <add baseAddress="http://localhost:8001/TappingBoard/DiscoveryService/" /> 
      </baseAddresses> 
     </host> 
     </service> 
    </services> 
    </system.serviceModel> 

을 단위 테스트는 클라이언트 시스템에서 완벽하게 작동하며 관리자 사용자와 비 관리자 사용자가 로컬에서 테스트를 실행합니다. TFS Build Server의 경우 Build를 시작하는 사용자는 TFSBuild라고하며 Domain Users의 구성원이고 TFS Build Server의 로컬 관리자입니다. 빌드 서버에서 동일한 단위 테스트를 실행

는 다음과 같은 예외 시작하십시오 TFS 서버가 IIS를 통해 일부 보고서 및 웹을 노출 포트 80을 사용하고 구축으로

System.ServiceModel.AddressAccessDeniedException: HTTP could not register URL http://+:8001/TappingBoard/DiscoveryService/. Your process does not have access rights to this namespace (see http://go.microsoft.com/fwlink/?LinkId=70353 for details). ---> System.Net.HttpListenerException: Access is denied 

를, 내가 사용하는 포트를 변경 WCF 서비스에서 8001로. 이전에는 포트 80에서도 작동하지 않았습니다.

이 테스트를 TFS 빌드 서버에서 실행할 수있는 옵션이 있습니까? 빌드시 추가로 구성해야합니까? 가장 유용한 정보를 제공하는 측면에서

사용 된 시스템은 다음과 같습니다

  • 데브 기계 : VS2010TS, 윈도우 7RTM는
  • 서버 기계 : TFS2010, Windows Server 2008 R2의 RTM

시간과 지원에 미리 감사드립니다.

우수, 미구엘.

답변

2

에도 같은 문제가있었습니다.
내가 사용하는 솔루션은 수동으로 http 네임 스페이스를 한 번 등록하는 것입니다.Paul Wheeler는 다음과 같은 훌륭한 도구를 제공합니다. HttpNamespaceManager

코드에서 레지스터 "http://localhost:8001/TappingBoard/DiscoveryService/"을 등록하고 단위 테스트를 실행하는 사용자에게 전체 액세스 권한을 부여하십시오.

희망이 도움이됩니다.

+0

+1 나는 같은 도구를 게시하기 위해 여기에 왔습니다. 작동하는지 알려주세요. –

+0

감사합니다,이 완벽하게 작동하지만 ... 이제 응용 프로그램에 대한 설치 프로그램을 만드는 동안 계정에 있어야합니다. 이 문제를 피하기 위해 nettcp로 전환 할 수 있습니다. 앱을 관리자로 실행하는 것도 옵션이 아닙니다. –

2

이것은 UAC의 문제와 같습니다. TFSBuild 계정이 로컬 관리자 인 경우에도 명시 적으로 구성하지 않으면 프로세스에 관리자 권한이 없습니다.

저는 로컬 박스 (Vista x64)에서 여러 번이 문제를 겪었으며 관리자 권한이 부족하다는 점을 항상 알고있었습니다. 왜 당신의 dev 창에서 비 관리자 모드로 작동하는지 말할 수는 없지만, Win7이 어떻게 작동하는지 모르겠습니다.

관리자 권한으로 프로세스를 실행하는 대신 configure the port in advance using netsh을 사용할 수 있습니다.

0

시스템에서 URL을 등록하려고 시도하면 예외가 발생합니다.

URL은 WAS (Windows Activayion Services)에 등록되어 있습니다. WAS가 설정되지 않은 문제가있을 수 있습니다.

이벤트 로그에 더 유용한 메시지가있을 수 있습니다.

관련 문제