【问题标题】:invoke callback during the execution of a contract operation在合约操作执行期间调用回调
【发布时间】:2012-07-16 08:36:16
【问题描述】:

我正在 Azure 上编写 WCF 服务。

在我的服务中,我需要在合约操作执行期间调用回调。当我尝试这样做时,会抛出异常并且客户端将被锁定。我认为这是由于为合约操作打开了通道,在当前通道中调用回调会锁定线程,对吗?我想获得这种情况的解决方案。

这里是超时异常信息:

这个请求操作发送到 net.tcp://127.255.0.0:8000/MytestWCFService 没有收到回复 在配置的超时 (00:00: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;   
   }   
}   

我在当前频道回拨,是双工频道。

【问题讨论】:

    标签: wcf wcf-callbacks asynchronous-wcf-call


    【解决方案1】:

    如果您的操作和回调是两种方式,您很可能会遇到死锁问题。使用此属性标记您的服务类:

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

    编辑:

    同样在您的 WPF 应用程序中将其添加到回调实现的实现中:

    [CallbackBehavior(UseSynchronizationContext = false)]
    

    【讨论】:

    • 嗨拉迪斯拉夫,我试过了。我还在此链接中尝试了三种解决方案:msdn.microsoft.com/en-us/magazine/cc163537.aspx#S4。但是,它似乎对我不起作用。我的情况是,如果我在服务合同方法中回调,它将死锁。请查看我的编辑以查看代码示例。
    • 你的客户端应用是什么?
    • 我的客户端应用程序作为 WPF 应用程序什么也不做。像这样的东西。公共部分类 MainWindow : 窗口,ICallback{ public void Callbackmethod(){}; }
    • 所以问题可能出在您的客户端,因为您在 UI 线程中托管回调。
    • 所以,也许吧。在按钮单击事件中,我将调用服务合同。并且在合约操作期间,它会调用在 WPF 客户端中实现的回调。是问题吗?如果是这样,我该如何解决?
    猜你喜欢
    • 2012-01-20
    • 2021-06-14
    • 2014-08-08
    • 1970-01-01
    • 1970-01-01
    • 2019-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多