2011-04-26 2 views
7

WCF 서비스의 끝점을 테스트하는 단위 테스트를 작성하려고하며 IIS 대신 단위 테스트 자체 내에서 서비스를 호스팅하려고합니다. 나는 ServiceHost을 사용하여 호스트를 읽을 수 있도록 내가 읽었고 변경 한 내용이 this article 인 것을 발견했습니다. 단위 테스트를 실행하려고 시도하고 있지만 약간 문제가있는 것 같습니다. ServiceHost를 사용하여 Unit Test에서 WCF 서비스 호스팅하기

내가 테스트를 실행

, 나는 서비스를 여는 시점에서 다음과 같은 오류가 발생합니다 :

이 서비스는 ASP.NET 호환성을 필요로하고 IIS에서 호스팅해야합니다. 어느 필수 이외의 값으로 Web.config의에서 켜거나 AspNetCompatibilityRequirementsAttribute.AspNetCompatibilityRequirementsMode 속성을 설정 ASP.NET 호환성 IIS 에서 서비스를 호스팅.

내 서비스 클래스를 설정하는 다음과 같은 속성에 의해 발생되는 :

[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Required)] 

그때 내의 app.config에 다음을 추가하려고했지만 어떤 변화를하지 않는 것 :

<system.serviceModel> 
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" /> 
</system.serviceModel> 

어떻게하면이 문제를 해결할 수 있습니까?

+1

쉽게 해결하기 : 그냥 제거 ASP.NET 호환성 요구 사항. 아니요, 심각하게 말합니다. –

+0

결국 나는 속성을 삭제했습니다. 나는 처음에 그곳에있는 정확한 이유를 모르겠다 고 우려했지만, 우리가 단위 테스트, CI 및 야간 빌드를 가지고있는 이유를 추측합니다 !!! :) – Penfold

+0

'HttpContext'를 놓치기 시작할 때 다시 필요합니다;) 물론 자기 호스팅이 창 밖으로 나옵니다! –

답변

10

오류 메시지에서 설명한 것처럼 ASP.NET 호환 모드를 사용하려면 ASP.NET 웹 서버에서 WCF 서비스를 호스팅해야합니다.

당신이 당신의 로컬 컴퓨터에 WCF 서비스에 대한 몇 가지 통합 테스트를 실행하려면 할 수 있습니다 항상 호스트 Visual Studio 개발 서버 (일명, 카시니)에서 서비스를 제공합니다.을 사용하면 단위 테스트 시나리오에 특히 유용한 프로세스에서 가벼운 ASP.NET 웹 서버를 실행하는 을 실행할 수있는 오픈 소스 라이브러리 인 CassiniDev을 사용하는 것이 좋습니다. 여기

가 MSTEST 사용 단위 테스트에 CassiniDev을 사용하는 방법에 대한 예입니다 :

[TestClass] 
public class MyServiceTest 
{ 
    private CassiniDevServer host; 

    [TestInitialize] 
    public void SetUp() 
    { 
     var host = new CassiniDevServer(); 
     host.StartServer(@"RelativePathToServiceProjectDir", 8080, "/", "localhost"); 
    } 

    [TestCleanup] 
    public void TearDown() 
    { 
     host.StopServer(); 
    } 
} 

관련 리소스 :

+0

CassiniDev에 대한 포인터를 보내 주셔서 감사합니다. 나는 그것을 통합하려고 시도하고 내 컴퓨터에서 실행될 때 완벽하게 실행되었지만 CI 빌드를 위해 TeamCity에서 실행하는 데 문제가있었습니다 ...그래서 나는 속성을 제거하기로 선택했다. – Penfold

+0

때때로 덜 적습니다 :) –

+0

테스트중인 프로젝트의 web.config를 테스트 데이터베이스 및 항목을 가리 키도록 변경하는 방법은 무엇입니까? –

관련 문제