net.tcp バインディングによって構成された WCF サービスがあります。クライアントからサービスに到達し、そのメソッドを呼び出すことができます。また、OperationContext.Current に到達できます。そのような:
[ServiceContract(CallbackContract = typeof(IServiceCallback))]
public interface IService
{
[OperationContract(IsOneWay = true)]
void Register();
}
[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single, ConcurrencyMode = ConcurrencyMode.Multiple)]
public class Service :IService
{
public void Register()
{
CallBacker.Client = OperationContext.Current.
GetCallbackChannel<IServiceCallback>();
}
}
}
public class CallBacker
{
public static IServiceCallback Client { get; set; }
public void Call(string message)
{
Client.Test(message);
}
}
クライアントが Service の Register メソッドを呼び出すと、チャネルが CallBacker.Client に格納されていることがわかりますが、CallBacker > Call(string message) の「Call」メソッドを呼び出すと、クライアントが null になります。
奇妙なことに、サービス構成を net.tcp から wsdualhttpbinding に設定すると、完全に機能します。この奇妙な問題を引き起こす可能性のある net.tcp と wsdualhttpbinding の間に違いはありますか?