public void SimpleDuplexBuffered () // sample[svc|cli]4.exe { ServiceHost host = new ServiceHost (typeof (Foo)); var bindingS = new CustomBinding (new BindingElement [] { new BinaryMessageEncodingBindingElement (), new TcpTransportBindingElement () }); bindingS.ReceiveTimeout = TimeSpan.FromSeconds (5); bindingS.OpenTimeout = TimeSpan.FromSeconds (20); host.AddServiceEndpoint (typeof (IFoo), bindingS, new Uri ("net.tcp://localhost:37564")); host.Description.Behaviors.Find<ServiceBehaviorAttribute> ().IncludeExceptionDetailInFaults = true; host.Open (); try { for (int i = 0; i < 2; i++) { var bindingC = new NetTcpBinding (); bindingC.Security.Mode = SecurityMode.None; IFooChannel proxy = new ChannelFactory<IFooChannel> (bindingC, new EndpointAddress ("net.tcp://localhost:37564/")).CreateChannel (); proxy.Open (); try { Assert.AreEqual ("TEST FOR ECHO", proxy.Echo ("TEST FOR ECHO"), "#1"); var sid = proxy.SessionId; Assert.AreEqual (3000, proxy.Add (1000, 2000), "#2"); Assert.AreEqual (sid, proxy.SessionId, "#3"); } finally { proxy.Close (); } } } catch (Exception ex) { Console.Error.WriteLine (ex); } finally { host.Close (); } }
// FIXME: To enable this, we must fix the "request-reply TCP channel must close the connection" issue. // It is strange, but the standalone test just works. public void SimpleRequestReplyStreamed () // sample[svc|cli]5.exe { ServiceHost host = new ServiceHost (typeof (Foo)); NetTcpBinding bindingS = new NetTcpBinding (); bindingS.TransferMode = TransferMode.Streamed; bindingS.Security.Mode = SecurityMode.None; bindingS.ReceiveTimeout = TimeSpan.FromSeconds (5); bindingS.OpenTimeout = TimeSpan.FromSeconds (20); host.AddServiceEndpoint (typeof (IFoo), bindingS, new Uri ("net.tcp://localhost:37564")); host.Description.Behaviors.Find<ServiceBehaviorAttribute> ().IncludeExceptionDetailInFaults = true; host.Open (); try { for (int i = 0; i < 2; i++) { var bindingC = new NetTcpBinding (); bindingS.TransferMode = TransferMode.Streamed; bindingC.Security.Mode = SecurityMode.None; IFooChannel proxy = new ChannelFactory<IFooChannel> (bindingC, new EndpointAddress ("net.tcp://localhost:37564/")).CreateChannel (); proxy.Open (); try { Assert.AreEqual ("TEST FOR ECHO", proxy.Echo ("TEST FOR ECHO"), "#1"); Assert.AreEqual (3000, proxy.Add (1000, 2000), "#2"); } finally { proxy.Close (); } } } finally { host.Close (); } }
public void ConnectionHttpTransport () { var host = new ServiceHost (typeof (Foo)); var bindingsvc = new CustomBinding (new BindingElement [] { new BinaryMessageEncodingBindingElement (), new HttpTransportBindingElement () }); int port = NetworkHelpers.FindFreePort (); host.AddServiceEndpoint (typeof (IFoo), bindingsvc, "http://localhost:" + port + "/"); host.Description.Behaviors.Find<ServiceBehaviorAttribute> ().IncludeExceptionDetailInFaults = true; host.Open (TimeSpan.FromSeconds (5)); try { for (int i = 0; i < 2; i++) { var bindingcli = new CustomBinding (new BindingElement [] { new BinaryMessageEncodingBindingElement (), new HttpTransportBindingElement () }); var cli = new ChannelFactory<IFooClient> (bindingcli, new EndpointAddress ("http://localhost:" + port + "/")).CreateChannel (); Assert.AreEqual ("test for echo", cli.Echo ("TEST FOR ECHO"), "#1"); var sid = cli.SessionId; Assert.AreEqual (3000, cli.Add (1000, 2000), "#2"); Assert.AreEqual (sid, cli.SessionId, "#3"); cli.Close (); } } finally { host.Close (TimeSpan.FromSeconds (5)); var t = new TcpListener (port); t.Start (); t.Stop (); } }