2013-11-27 59 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