2013-11-27 2 views
2

WCF 콜백을 구현하려고합니다. 내 서비스 측면에서 콜백 메서드를 호출하면 비동기 적으로 실행됩니다. 콜백 메소드가 다음 명령문으로 넘어 가기 전에 콜백 메소드가 실행을 완료 할 때까지 기다릴 수있는 방법이 있는가?WCF 콜백 - 동기 실행

//Server Side 
public interface ICallback 
{   
    [OperationContract] 
    void Oncallback1(string str); 
    [OperationContract] 
    int Oncallback2(string str); 
}  
[ServiceContract(CallbackContract = typeof(ICallback))] 
public interface IServiceContract 
{ 
    [OperationContract] 
    void Method1();  
} 

[ServiceBehavior(ConcurrencyMode = ConcurrencyMode.Reentrant)] 
public class MycallbackService : IServiceContract 
{   

    public void Method1() 
    {    
     ICallback objIcallback = OperationContext.Current.GetCallbackChannel<ICallback>(); 
     Thread.Sleep(5000); 
     objIcallback.Oncallback1(obj1); 
     Console.WriteLine("calling callback2"); 
     Console.WriteLine(objIcallback.Oncallback2("2")); 
     Console.WriteLine("Service Execution over!"); 
    } 
} 
//Client Side 
[CallbackBehavior] 
public class callbackClient : ICallback 
{ 
    public void Oncallback1(CallbackService.EventInfo obj) 
    { 
     Thread.Sleep(5000); 
     Console.WriteLine("Callback 1"); 

    } 
    public int Oncallback2(string str) 
    { 
     Thread.Sleep(5000); 
     Console.WriteLine("Callback 4"); 
     return 2; 
    } 
} 

여기서 "Console.WriteLine ("calling callback2 ");" callback1 메서드가 완료되기 전에 실행됩니다. 반면 콜백 2가 끝날 때까지 대기합니다. 그것은 IsOneWay = true 파이어 앤 포겟 작업입니다 기본적으로 그래서

void Oncallback1(string str); 
int Oncallback2(string str); 

Oncallback1 아무것도 반환 :이 때문에 콜백 method`s의 차이라고 생각

답변

2

유형을 반환합니다. 반면 Oncallback2의 기본값은 IsOneWay = false

입니다.