2012-07-16 3 views
3

Azure에서 WCF 서비스를 프로그래밍 중입니다.계약 작업 수행 중 콜백 호출

내 서비스에서 계약 작업을 실행하는 동안 콜백을 호출해야합니다. 그렇게하려고하면 예외가 발생하고 클라이언트가 잠 깁니다. 나는 채널이 계약 작업을 위해 열렸 기 때문에 현재 채널에서 콜백 호출이 스레드를 잠글 것이라고 생각합니다. 맞습니까? 나는이 시나리오에 대한 해결책을 원한다. 이 요청 작업이 net.tcp로 전송

: 여기

는 시간 제한 예외 메시지입니다 //127.255.0.0가 : 8000/MytestWCFService가 구성된 제한 시간 내에 응답 을받지 않았다 (0시 : 59.9889989). 이 작업에 할당 된 의 시간이 더 길어질 수 있습니다. 이 은 서비스가 여전히 작업을 처리 중이거나 이므로 서비스가 회신 메시지를 보낼 수 없었기 때문일 수 있습니다. 채널/프록시를 IContextChannel로 캐스팅하고 OperationTimeout 속성을 설정하여 작업 시간 초과를 늘리고 서비스가 클라이언트에 연결할 수 있는지 확인하십시오. 편집

: 코드 샘플

[ServiceContract(Namespace="testnamespace")] 
public interface ICallback 
{ 
    [OperationContract(IsOneWay=true)] 
    void Callbackmethod(); 
} 

는 그럼 난 서비스 측면에서 IContract를 구현 :

난 다시 현재 채널에서 호출 오전
[ServiceBehavior(InstanceContextMode=InstanceContextMode.Single, 
    ConcurrencyMode=ConcurrencyMode.Reentrant, 
    AddressFilterMode=AddressFilterMode.Any)] 
public class WCFService : IContract 
{  
    public int Add(int a, int b) 
    { 
     int result = a + b; 
     ICallback callback = OperationContext.Current.GetCallbackChannel<ICallback>(); 
     callback.Callbackmethod(); 
     return result; 
    } 
} 

, 그것은 이중 채널입니다.

답변

8

작업과 콜백이 양방향 인 경우 교착 상태가 발생할 가능성이 큽니다. 이 속성 서비스 클래스를 마크 :

[ServiceBehavior(ConcurrencyMode = ConcurrencyMode.Reentrant)] 
public class MyService : IMyServiceContract { ... } 

편집 :

또한 WPF 응용 프로그램에서 콜백 구현의 구현이 추가

[CallbackBehavior(UseSynchronizationContext = false)] 
+0

안녕 라디, 나는 그것을 시도했다. 또한이 링크에서 세 가지 솔루션을 시도했습니다. http://msdn.microsoft.com/en-us/magazine/cc163537.aspx#S4 그러나 그것은 나를 위해 작동하지 않는 것 같습니다. 내 시나리오는 서비스 계약 메소드를 다시 호출하면 교착 상태가 발생한다는 것입니다. 내 편집을보고 코드 샘플을 검토하십시오. –

+0

클라이언트 응용 프로그램이 무엇입니까? –

+0

내 클라이언트 응용 프로그램은 WPF 응용 프로그램으로 아무것도하지 않습니다. 이 같은. 공용 부분 클래스 MainWindow : Window, ICallback {public void Callbackmethod() {}; } –