2013-11-27 56 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方法結束之前執行。而它等到callback2結束。

回答

2

我相信這是因爲回調method`s差的返回類型:

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

Oncallback1回報沒有那麼默認情況下它是一個IsOneWay = true射後不理操作。另一方面Oncallback2默認爲IsOneWay = false