2012-05-08 7 views
2

장면을 설정합니다.WCF 첫 번째 실행시 끝점을 찾을 수 없으며 초에 있음

우리는 WCF 서비스 세트 는 (S1은 S2 ... Sn을) 수신 된 메시지를 처리 ​​체인 동작는, 제 서비스가 어떤 처리를 수행 호스트와 그 다음의 서비스로 메시지를 넘겨 갖는 더 많은 처리를합니다. 최종 WCF 서비스 (U)은 Sn 출력을 받고 유효성을 검사합니다. 이 .exe가 서비스 U 별도로 파일을 통해

하는 서비스 는 S1, S2는, ... Sn을 시작된다. Sevice U은 Unit Test에서 Visual Studio 2010으로 시작되고 일단 시작되면 처리를 위해 서비스 s1로 메시지가 시작됩니다. 단지의 첫 번째 실행에서 발생 이상한 것은이 오류가

There was no endpoint listening at http://localhost:9005/ValidationService.svc

: 우리가보고있는 문제는 서비스 주석 시도가 확인을 위해 U 서비스를 제공 할 수있는 메시지를 전달하면 우리가 오류로 나타난 것입니다 단위 테스트. 초기 실패 후 테스트를 다시 실행하면 테스트는 문제없이 완료됩니다 (Sn 메시지를 U에 성공적으로 전달합니다). 그러나 서비스를 닫는 S1, S2, ... Sn 단위 테스트를 다시 시작하고 다시 실행하면 첫 번째 테스트가 실행될 때 "no listening listening at ..."이 다시 throw됩니다.

내 생각이 우리가 확인 서비스 U 수있는 방법을 경우가 있다면 그러나 나는 모호 해요, 서비스 U 여전히 서비스 주석 시도가 메시지를 보낼 동안 개장 프로세스를 완료 할 수도 있습니다 S1에 메시지를 보내기 전에 듣고 듣고 있습니까?

U 다음 코드에 의해 시작되는 서비스 : 어떤 도움을 크게 감상 할 수

public void TestChain() 
    { 
     var binding = new BasicHttpBinding(); 

     // Construct service U 
     var serviceHostU = new ServiceHost(typeof(ChainContract), "http://localhost:9005"); 
     serviceHostU.AddServiceEndpoint(typeof(ChainContractImplementation), binding, "ValidationService.svc"); 
     serviceHostU.Open(); 

     //fire message into service s1 
     var ep = new EndpointAddress("http://localhost:8777/InputService.svc"); 
     var inputFactory = new ChannelFactory<ChainContract>(binding, ep); 
     var channel = inputFactory.CreateChannel(); 
     //fire a message into service s1. 
     channel.ReceiveMessage(new TestMessage()); 

     serviceHostU.Close(); 
     } 

.

+0

나는 내가 기대하는 그에게 내 단위 테스트 중 하나에 비슷한 문제를 가지고 있지만, B를 가지고, 그래서는 코드가 변경하지 않는 날은 아직 A. 기대 말에도 불구하고 B를 예상 어떤 이유로 그것을 실행 다시 할 때 그냥 다시 실행하면 그 기억을 새로 고치는 것 같아요. 당신이 원하는대로 돌아가는 것 같아요. 가끔은 그 결과를 저장하는 곳과 관련이 있다고 생각합니다. – RhysW

답변

0

두 번째 호출이 초기화되는 동안 첫 번째 ServiceHost가 초기화된다는 가정은 맞을 것으로 생각합니다.

이 문제를 해결하려면 ServiceHost의 Opened 이벤트에 대리인을 연결하고 거기에서 두 번째 서비스를 실행할 수 있습니다.

+0

응답 해 주셔서 감사합니다. 두 번째 테스트에서 서비스 U가 시작되는 이유는 무엇입니까? 첫 번째 실행보다 빠르게 실행됩니까? –

관련 문제