1

コールバックを使用して WCF サービスを作成できました。コールバックは期待どおりに機能していますが、1 つのクライアントに対してのみです。別のクライアントを起動すると、最初のクライアントはコールバックの受信を停止しますが、2 番目のクライアントはコールバックを 2 回受信します。InstanceContextModeSingle、PerCall、および PerSession モードで試しましたが、同じ問題が発生します。

この問題を解決する方法を知っていますか?

サービスクラスは次のとおりです。

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

1 に答える 1