Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    text
    copied!<p>What binding are you using? In the SSCCE below the context is not null on the callback implementation.</p> <pre><code>public class StackOverflow_15769719 { [ServiceContract(CallbackContract = typeof(ICallback))] public interface ITest { [OperationContract] string Hello(string text); } [ServiceContract] public interface ICallback { [OperationContract(IsOneWay = true)] void OnHello(string text); } public class Service : ITest { public string Hello(string text) { ICallback callback = OperationContext.Current.GetCallbackChannel&lt;ICallback&gt;(); ThreadPool.QueueUserWorkItem(delegate { callback.OnHello(text); }); return text; } } class MyCallback : ICallback { AutoResetEvent evt; public MyCallback(AutoResetEvent evt) { this.evt = evt; } public void OnHello(string text) { Console.WriteLine("[callback] Headers: "); foreach (var header in OperationContext.Current.IncomingMessageHeaders) { Console.WriteLine("[callback] {0}", header); } Console.WriteLine("[callback] OnHello({0})", text); evt.Set(); } } public static void Test() { bool useTcp = false; string baseAddress = useTcp ? "net.tcp://" + Environment.MachineName + ":8000/Service" : "http://" + Environment.MachineName + ":8000/Service"; ServiceHost host = new ServiceHost(typeof(Service), new Uri(baseAddress)); Binding binding = useTcp ? (Binding)new NetTcpBinding(SecurityMode.None) : new WSDualHttpBinding(WSDualHttpSecurityMode.None) { ClientBaseAddress = new Uri("http://" + Environment.MachineName + ":8888/Client") }; host.AddServiceEndpoint(typeof(ITest), binding, ""); host.Open(); Console.WriteLine("Host opened"); AutoResetEvent evt = new AutoResetEvent(false); MyCallback callback = new MyCallback(evt); DuplexChannelFactory&lt;ITest&gt; factory = new DuplexChannelFactory&lt;ITest&gt;( new InstanceContext(callback), binding, new EndpointAddress(baseAddress)); ITest proxy = factory.CreateChannel(); Console.WriteLine(proxy.Hello("foo bar")); evt.WaitOne(); ((IClientChannel)proxy).Close(); factory.Close(); Console.Write("Press ENTER to close the host"); Console.ReadLine(); host.Close(); } } </code></pre>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload