WCF回调不适用于多个客户端

时间:2014-06-24 05:55:08

标签: c# wcf wcf-callbacks

我设法创建了一个带回调的WCF服务。回调正在按预期工作,但仅适用于一个客户端。 如果我启动另一个客户端,第一个停止接收回调,但第二个接收它们两次,依此类推。 我在Single,PerCall和PerSession模式中尝试InstanceContextMode,但它会导致同样的问题。

你知道如何解决这个问题吗?

这是服务类:

[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
    }

1 个答案:

答案 0 :(得分:1)

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

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

更多信息:WCF callback with multiple clients