WCF回调不能为多个客户端工作

本文关键字:客户端 工作 回调 不能 WCF | 更新日期: 2023-09-27 18:09:58

我已经设法创建了一个带回调的WCF服务。回调按预期工作,但只针对一个客户端。如果启动另一个客户机,第一个客户机将停止接收回调,但第二个客户机将接收回调两次,以此类推。我已经尝试过InstanceContextMode在单一,PerCall和个人模式,但它导致同样的问题。

你知道怎么解决这个问题吗?

服务类:

[ServiceBehavior(ConcurrencyMode = ConcurrencyMode.Reentrant, InstanceContextMode = InstanceContextMode.Single)]
    public class HostFunctions : IHostFunctions
    {
        #region Implementation of IHostFunctions
        public static IHostFunctionsCallback Callback;
        public static Timer Timer;
        public void OpenSession()
        {
            Console.WriteLine("> Session opened at {0}", DateTime.Now);
            Callback = OperationContext.Current.GetCallbackChannel<IHostFunctionsCallback>();
            Timer = new Timer(1000);
            Timer.Elapsed += OnTimerElapsed;
            Timer.Enabled = true;
        }
        private void OnTimerElapsed(object sender, ElapsedEventArgs e)
        {
            if (Callback != null)
            {
                Callback.OnCallback();
            }
        }
        #endregion
    }

这是回调类:

[CallbackBehavior(ConcurrencyMode = ConcurrencyMode.Reentrant, UseSynchronizationContext = false)]
    public class Callback : IHostFunctionsCallback
    {
        #region Implementation of ICallback
        public void OnCallback()
        {
            Console.WriteLine("> Received callback at {0}", DateTime.Now);
        }
        #endregion
    }

WCF回调不能为多个客户端工作

我觉得静态存在问题,因为您在静态中存储回调引用。回调引用包含与它回调的客户端相关的信息。

导致第一个客户端在第二个客户端注册时错过它。

更多信息:多个客户端的WCF回调