2011-09-05 6 views
1

서비스 계약 정지WCF 이중 서비스는 콜백 통화

public interface IClientCallBackChannel 
{ 
    [OperationContract(IsOneWay = false)] 
    object DoCommand(Command command); 
} 


class ClientCallBackChannelImpl 
{ 
    public object DoCommand(Command command) 
    { 
     // freezes service 
     serverService.foo(); 

     // OK 
     new Action(() => 
     { 
      Thread.Sleep(1000);       
      serverService.foo();           
     } 
      ).BeginInvoke(null,null); 

    }    
} 

나는 이중 서비스가 및 그 방법 내부 클라이언트 방법 'DoCommand'고 전화하고 할 때 foo 서비스 메서드에 대한 호출이 있고 내 서비스가 멈 춥니 다. foo를 비동기 적으로 호출하면 제대로 작동하지만 호출이 동기되어야합니다.

답변

1

저는 문제는 값을 반환하기 위해 DoCommand가 필요하므로 OneWay를 만들 수 없다고 생각합니다. 이 점에 대해 생각하면 서비스가 차단되어야합니다.

ServiceBehavior의 ConcurrencyMode을 여러 개로 설정할 수 있습니다.이 기능은 작동하지만 가장 좋은 옵션은 아닙니다.

양방향 의사 소통을 원한다면 OneWay-Methods를 사용하십시오. 이렇게하면 문제가 해결되고 위에 언급 한 동작과 관련된 어려움을 피할 수 있습니다.

+0

ServiceBehavior의 ConcurrencyMode를 Multiple로 설정하려고 시도했지만 여전히 차단됩니다. 서비스와 고객 모두에 – jacob

+0

이 있습니까? 이상한 - 어쨌든, 다른 하나 내에서 하나를 호출하려면 OneWay만으로 리팩토링하십시오. – Carsten

+0

및 한 가지 더 : 코드 절반 만 볼 수 있습니다. foo에서 DoCommand를 다시 호출하지 않도록하십시오. 여기에 무한 루프가있을 수도 있습니다. – Carsten