【问题标题】:WCF Callback - Synchronous executionWCF 回调 - 同步执行
【发布时间】:2013-11-27 07:25:42
【问题描述】:

我正在尝试实现 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 完成。

【问题讨论】:

    标签: c# wcf callback wcf-callbacks


    【解决方案1】:

    我相信这是因为回调方法的返回类型不同:

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

    Oncallback1 不返回任何内容,因此默认情况下它是 IsOneWay = true 即发即弃操作。另一方面 Oncallback2 默认为 IsOneWay = false

    【讨论】:

      猜你喜欢
      • 2015-07-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-24
      • 1970-01-01
      • 1970-01-01
      • 2014-11-21
      • 1970-01-01
      相关资源
      最近更新 更多