コールバックを使用して WCF サービスを作成できました。コールバックは期待どおりに機能していますが、1 つのクライアントに対してのみです。別のクライアントを起動すると、最初のクライアントはコールバックの受信を停止しますが、2 番目のクライアントはコールバックを 2 回受信します。InstanceContextMode
Single、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
}