2010-01-13 3 views
1

주제를 듣고 들어오는 메시지를 처리하는 WCF 호스트가 있습니다. 코드는이 모양 :WCF가 메시지를받지 못합니다. 어떻게 WCF 서비스를 디버깅 할 수 있습니까?

using (ServiceHost host = new ServiceHost(MessagingServiceType)) 
{ 
       host.Open(); 
} 

을하고 MessagingServiceType은 다음과 같습니다

[ServiceBehavior(AddressFilterMode = AddressFilterMode.Any)] 
    public class MessagingServiceType : IMessagingService 
    { 
     /// <summary> 
     /// service instance 
     /// </summary> 
     private readonly MessagingService service; 

     /// <summary> 
     /// Initializes a new instance of the <see cref="MessagingServiceType"/> class. 
     /// </summary> 
     public MessagingServiceType() 
     { 
      // creating new messaging service 
      service = new Singleton<MessagingService>(); 
     } 

     /// <summary> 
     /// Sends the message. 
     /// </summary> 
     /// <param name="messageContent">Content of the message.</param> 
     public void SendMessage(string messageContent) 
     { 
      Message msg = Message.CreateMessage(MessageVersion.Default, string.Empty, messageContent); 

      service.MessageReceived(msg); 
     } 
    } 

문제는 내가 별도의 테스트 응용 프로그램에 실행하고있을 때, 모든 것이 잘 작동한다는 것입니다 모든 서비스를받을 수 모든 메시지. 그러나, 내가 똑같은 코드를 가져 와서 내 실제 응용 프로그램에 넣으면 아무런 메시지도 수신되지 않습니다.

내 질문에 매우 간단합니다 : 어떻게 그것과 함께 잘못되고 왜 메시지가 처리되지 않는지 보려면이 서비스를 "디버깅"할 수 있습니까? 어쨌든이 둘을 비교할 것입니까?

감사

+2

나는'using' 블록에 더 많은 코드가 있다고 추측합니다. 그렇지 않으면 호스트가 폐기 될 것이기 때문입니다. – CSharpAtl

답변

4

서비스가 당신의 코드를 보면 .... 아무것도받을 수 없습니다 물론 :

using (ServiceHost host = new ServiceHost(MessagingServiceType)) 
{ 
       host.Open(); 
} 

당신이 도달하면 정확히 어떻게됩니까 "}"?? "using"절 (귀하의 ServiceHost)에있는 객체는 해제되거나 폐기됩니다! 당신이 그것을 알기도 전에 ==> 서비스는

당신은 같은 것을 할 필요가 ..... 다시 사라 :

ServiceHost host = new ServiceHost(MessagingServiceType); 
host.Open(); 

Console.ReadLine(); // wait for a ENTER press 
host.Close(); 

필요 없음 큰 디버깅을 ........:-)

+0

+1, omg, nice catch =) –

+1

그래, 그건 내 코멘트 ..... 그들이 사용하는 블록에서 빠진 코드가 더 많다고 가정했다. – CSharpAtl

+0

감사합니다. 그래서 ... –

1

몇 가지 옵션 :

  • 당신은 당신이 할 수있는
  • 당신은 패킷을 사용할 수 있습니다
  • 받은 메시지를 확인하려면 몇 가지 message inspector를 만들려면 서비스 호스트로 비주얼 스튜디오 디버거를 연결할 수 있습니다 스니퍼,하지만 이것은 과도한 것 같습니다.

서비스가 실행 중이고 호스트에서 오류가 발생하지 않았는지, 개발 .config 파일의 모든 관련 설정 정보를 복사했는지 확인하십시오.

1

Visual Studio는 디버깅을 위해 원격 프로세스에 연결할 수있는 기능을 제공합니다. 원격 컴퓨터에서 Visual Studio 원격 디버깅 모니터를 실행해야합니다.

Visual Studio에서 Debug/Attach To Process으로 이동할 수 있습니다. 대화 상자에서 원격 서버 이름을 입력 할 수있는 한정자 태그가 표시됩니다. 일단 입력하면 WCF 서비스 프로세스에 연결할 수 있습니다. 서비스가 IIS를 통해 호스팅되는 경우 w3wp.exe 프로세스에 첨부 할 수 있습니다.

이렇게하면 서비스 메서드에서 코드에 중단 점을 설정할 수 있으며 원격 서비스에서 해당 메서드를 실행하면 중단 점이 적중됩니다. 코드가 원격 서버의 코드와 완전히 동기화되어야합니다. 그렇지 않으면 디버거를 단계별로 진행하면서 선이 꺼집니다. 여기

는 또한 몇 가지 팁이있는 링크입니다 : http://geekswithblogs.net/TimH/archive/2006/08/08/87355.aspx