2013-04-07 3 views
0

나는 서비스를 가지고 있고 "netstat -anb"를 사용하여 서비스가 실행 중일 때 올바른 포트 (8040)에서 수신 대기하고 있음을 확인했다.WCF 프록시 호출이 서버에 등록되지 않았습니까?

[OperationContract] 
    bool RegisterPlayer(); 

서비스 클래스 자체가 명시 적으로 계약을 구현합니다 : 서비스 계약은 다음과 같은 계약을 포함

bool IMechService.RegisterPlayer() 
    { 
     if (P1 != null) 
     { 
      P1 = OperationContext.Current.GetCallbackChannel<IMechServiceCallback>(); 
      return true; 
     } 
     else if (P2 != null) 
     { 
      P2 = OperationContext.Current.GetCallbackChannel<IMechServiceCallback>(); 
      return true; 
     } 
     return false; 
    } 

그리고는 svcutil 생성 된 프록시는 다음과 같은 방법 작성

public bool RegisterPlayer() 
{ 
    return base.Channel.RegisterPlayer(); 
} 

이 코드를 프록시를 생성하고 메소드를 호출하려고 시도합니다. 난 둘 다 사용하여 DuplexChannelFactory과는 svcutil 생성 된 프록시 클래스를 시도했다, 둘 다 동일한 결과 제공 :

client = new MechServiceClient(new InstanceContext(this)); 
//client = DuplexChannelFactory<IMechService>.CreateChannel(this, new NetTcpBinding(), new EndpointAddress("net.tcp://localhost:8040/MechService")); 
client.RegisterPlayer(); 

코드 실행이 프록시 클래스의 RegisterPlayer에 도달하지만 시간 초과로 진행, 결코 서비스에 RegisterPlayer를 실행하지를 . 불행히도 시간이 지남에 따라 문제를 찾을 위치를 나타내는 데 도움이되는 예외 나 오류가 발생하지 않습니다. 지금까지 서비스가 실행 중이고 "netstat -anb"를 사용하여 포트 8040에서 수신 대기중인 것으로 확인되었으며 mex 끝점이 의도 한대로 작동하고 메타 데이터를 게시하고 있음을 확인했습니다. Windows 방화벽을 껐습니다. 또한 훨씬 간단한 구현을 통해 별도의 테스트 프로젝트를 만들었으며이를 통해 올바르게 단계를 수행하고 있는지 확인하고 간단한 테스트 프로젝트가 올바르게 작동합니다. 이 문제를 일으키는 원인이 무엇인지에 대한 아이디어가 없기 때문에 조언을 제공해 주시면 감사하겠습니다.

+0

메시지 로깅을 시도한 적이 있습니까? http://msdn.microsoft.com/en-us/library/ms731859.aspx –

답변

0

로깅에 대한 앤드류의 제안이 도움이되었습니다. 기본적으로 내 OperationContracts를 isoneway = true로 선언 한 것이 수정되었습니다.

0

ConcurrencyModeConcurrencyMode.Multiple으로 설정 했습니까?

[ServiceBehavior(ConcurrencyMode = ConcurrencyMode.Multiple)] 
class MechServiceImpl : IMechService 
{ 
    // .. 
} 

서비스의 기본 동시성 모드는 콜백과 합병증을 일으킬 수 있습니다 ConcurrencyMode.Single이다.

+0

이 메시지는 재진입 메시지로 설정되었지만 다중 메시지가 변경되지 않은 것 같습니다. –

관련 문제