WCF回调未在客户端调用,并在服务器端挂起

 西瓜凉皮大夏天 发布于 2023-02-05 10:53

我有一个WCF服务,它对于常规客户端 - >服务器调用非常好.但是我试图在服务中引入一个简单的回调,但它不起作用...最终我不确定我哪里出错了所以让我告诉你设置并告诉你我所知道的.

1)合同

public interface IPIRSCallbackService
{
    [OperationContract]
    void OnCallback();
}

[ServiceContract(CallbackContract = typeof(IPIRSCallbackService))]
public interface IPIRSService
{ etc...

2)服务器合同实施

注意:我检查回调通道的状态,它是"打开" - 不知道这是多少值得.

[ServiceBehavior(ConcurrencyMode = ConcurrencyMode.Reentrant)]
class PIRSService : IPIRSService
{

    public PIRSService()
    {
        callback = OperationContext.Current.GetCallbackChannel();
        var x = ((ICommunicationObject)callback).State;
        callback.OnCallback(); // HANGS HERE
    }
    etc.

3)客户端 - 创建代理

现在,这可能不是您将看到的常见方式,因为我使用ViewModelLocator将服务注入到我的视图模型中...但我确信这不会导致问题...并注意到正常的服务调用工作绝对没问题.

ViewModelLocator注册服务实例

       SimpleIoc.Default.Register(() =>
            {
                IPIRSCallbackService callback = new PIRSCallbackService(); 
                InstanceContext context = new InstanceContext(callback);
                return new PIRSService(context, "PIRSClient");
            }, true);

       SimpleIoc.Default.Register(() => 
            {
                return SimpleIoc.Default.GetInstance();
            }, true);

4)连接到服务

    DuplexChannelFactory channelFactory = new DuplexChannelFactory(callbackContext, endpointConfigName);
    channelFactory.Credentials.UserName.UserName = userName;
    channelFactory.Credentials.UserName.Password = password;
    proxy = channelFactory.CreateChannel();
    ((IClientChannel)proxy).Open();

5)客户端 - 端点配置

  
    
      
    
  

所以,我不知道为什么没有触发回调协议的客户端实现...因此服务器端调用回调方法会挂起调用...因为它正在等待回调完成.我确信回调没有正确注册是一个问题...但我不确定我做错了什么.我是否需要在客户端端点或其他任何位置注册回叫合同?

1 个回答
  • 您可以确保将"ConcurrencyMode.Multiple"添加到实现回调的类的"CallbackBehavior"属性中.

    [CallbackBehavior(ConcurrencyMode=ConcurrencyMode.Multiple)] 
    

    Callback ConcurrencyMode参考:http:
    //blogs.msdn.com/b/dsnotes/archive/2013/09/18/wcf-callback-operations-are-invoked-sequentially.aspx

    此外,如果您还没有,可能需要考虑启用WCF跟踪以确保服务器确实正在调用客户端回调方法.

    WCF跟踪参考:http: //msdn.microsoft.com/en-us/library/ms733025.aspx

    2023-02-05 10:56 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有