public void EndpointDispatcherAddTest() { var uri = CreateAvailableUri("http://localhost:37564"); MyChannelDispatcher d = new MyChannelDispatcher(new MyChannelListener(uri)); d.Endpoints.Add(new EndpointDispatcher(new EndpointAddress(uri), "", "")); }
// FIXME: this test itself indeed passes, but some weird conflict that blocks correspoding port happens between this and somewhere (probably above) // [Test] public void EndpointDispatcherAddTest9() // test singleton service { var uri = CreateAvailableUri("http://localhost:37564"); ServiceHost h = new ServiceHost(new TestContract(), uri); h.Description.Behaviors.Find <ServiceBehaviorAttribute> ().InstanceContextMode = InstanceContextMode.Single; var listener = new MyChannelListener <IReplyChannel> (uri); MyChannelDispatcher d = new MyChannelDispatcher(listener); var ed = new EndpointDispatcher(new EndpointAddress(uri), "", ""); d.Endpoints.Add(ed); ed.DispatchRuntime.Type = typeof(TestContract); d.MessageVersion = MessageVersion.Default; h.AddServiceEndpoint(typeof(TestContract), new BasicHttpBinding(), uri.ToString()); h.ChannelDispatchers.Clear(); Assert.IsNull(ed.DispatchRuntime.SingletonInstanceContext, "#1"); h.ChannelDispatchers.Add(d); Assert.IsNull(ed.DispatchRuntime.SingletonInstanceContext, "#2"); try { h.Open(TimeSpan.FromSeconds(10)); Assert.IsNull(ed.DispatchRuntime.InstanceProvider, "#4"); Assert.IsNotNull(ed.DispatchRuntime.InstanceContextProvider, "#5"); // it was set after ServiceHost.Open(). Assert.IsNotNull(ed.DispatchRuntime.SingletonInstanceContext, "#6"); } finally { h.Close(TimeSpan.FromSeconds(10)); h.Abort(); } }
public void EndpointDispatcherAddTest6() { var uri = CreateAvailableUri("http://localhost:37564"); ServiceHost h = new ServiceHost(typeof(TestContract), uri); var binding = new BasicHttpBinding(); var listener = new MyChannelListener <IReplyChannel> (uri); MyChannelDispatcher d = new MyChannelDispatcher(listener); var ed = new EndpointDispatcher(new EndpointAddress(uri), "", ""); d.Endpoints.Add(ed); Assert.IsFalse(d.Attached, "#x1"); ed.DispatchRuntime.Type = typeof(TestContract); d.MessageVersion = MessageVersion.Default; h.ChannelDispatchers.Add(d); Assert.IsTrue(d.Attached, "#x2"); d.Open(); // At this state, it does *not* call AcceptChannel() yet. Assert.IsFalse(listener.AcceptChannelTried, "#1"); Assert.IsFalse(listener.WaitForChannelTried, "#2"); Assert.IsNotNull(ed.DispatchRuntime, "#3"); Assert.IsNull(ed.DispatchRuntime.InstanceProvider, "#4"); Assert.IsNull(ed.DispatchRuntime.InstanceContextProvider, "#5"); // it is not still set after ChannelDispatcher.Open(). Assert.IsNull(ed.DispatchRuntime.InstanceProvider, "#5.2"); Assert.IsNull(ed.DispatchRuntime.SingletonInstanceContext, "#6"); d.Close(); // we don't have to even close it. }
public void EndpointDispatcherAddTest7() { var uri = CreateAvailableUri("http://localhost:37564"); ServiceHost h = new ServiceHost(typeof(TestContract), uri); var binding = new BasicHttpBinding(); var listener = new MyChannelListener <IReplyChannel> (uri); MyChannelDispatcher d = new MyChannelDispatcher(listener); var ed = new EndpointDispatcher(new EndpointAddress(uri), "", ""); d.Endpoints.Add(ed); ed.DispatchRuntime.Type = typeof(TestContract); d.MessageVersion = MessageVersion.Default; // add service endpoint to open the host (unlike all tests above). h.AddServiceEndpoint(typeof(TestContract), new BasicHttpBinding(), uri.ToString()); h.ChannelDispatchers.Clear(); h.ChannelDispatchers.Add(d); d.Open(); // At this state, it does *not* call AcceptChannel() yet. // This rejects already-opened ChannelDispatcher. h.Open(TimeSpan.FromSeconds(10)); // should not reach here, but in case it didn't, it must be closed. h.Close(TimeSpan.FromSeconds(10)); }
[ExpectedException(typeof(InvalidOperationException))] // i.e. it is thrown synchronously in current thread. public void EndpointDispatcherAddTest4() { var uri = CreateAvailableUri("http://localhost:37564"); ServiceHost h = new ServiceHost(typeof(TestContract), uri); var listener = new MyChannelListener(uri); MyChannelDispatcher d = new MyChannelDispatcher(listener); var ed = new EndpointDispatcher(new EndpointAddress(uri), "", ""); Assert.IsNotNull(ed.DispatchRuntime, "#1"); Assert.IsNull(ed.DispatchRuntime.InstanceProvider, "#2"); Assert.IsNull(ed.DispatchRuntime.InstanceContextProvider, "#3"); Assert.IsNull(ed.DispatchRuntime.InstanceProvider, "#3.2"); Assert.IsNull(ed.DispatchRuntime.SingletonInstanceContext, "#4"); d.Endpoints.Add(ed); d.MessageVersion = MessageVersion.Default; h.ChannelDispatchers.Add(d); // it misses DispatchRuntime.Type, which seems set // automatically when the dispatcher is created in // ordinal process but need to be set manually in this case. try { d.Open(); try { // should not reach here, but in case it didn't, it must be closed. d.Close(TimeSpan.FromSeconds(10)); } catch { } } finally { Assert.AreEqual(CommunicationState.Opened, listener.State, "#5"); } }
public void EndpointDispatcherAddTest() { var uri = new Uri("http://localhost:" + NetworkHelpers.FindFreePort()); MyChannelDispatcher d = new MyChannelDispatcher(new MyChannelListener(uri)); d.Endpoints.Add(new EndpointDispatcher(new EndpointAddress(uri), "", "")); }
public void EndpointDispatcherAddTest2() { var uri = CreateAvailableUri("http://localhost:" + NetworkHelpers.FindFreePort()); MyChannelDispatcher d = new MyChannelDispatcher(new MyChannelListener(uri)); d.Endpoints.Add(new EndpointDispatcher(new EndpointAddress(uri), "", "")); d.Open(); // the dispatcher must be attached. }
public void EndpointDispatcherAddTest3() { var uri = CreateAvailableUri("http://localhost:37564"); ServiceHost h = new ServiceHost(typeof(TestContract), uri); MyChannelDispatcher d = new MyChannelDispatcher(new MyChannelListener(uri)); d.Endpoints.Add(new EndpointDispatcher(new EndpointAddress(uri), "", "")); h.ChannelDispatchers.Add(d); d.Open(); // missing MessageVersion }
public void EndpointDispatcherAddTest3() { var uri = new Uri("http://localhost:" + NetworkHelpers.FindFreePort()); ServiceHost h = new ServiceHost(typeof(TestContract), uri); MyChannelDispatcher d = new MyChannelDispatcher(new MyChannelListener(uri)); d.Endpoints.Add(new EndpointDispatcher(new EndpointAddress(uri), "", "")); h.ChannelDispatchers.Add(d); d.Open(); // missing MessageVersion }
// Validating duplicate listen URI causes this regression. // Since it is niche, I rather fixed ServiceHostBase to introduce validation. // It is probably because this code doesn't use ServiceEndpoint to build IChannelListener i.e. built without Binding. // We can add an extra field to ChannelDispatcher to indicate that it is from ServiceEndpoint (i.e. with Binding), // but it makes little sense especially for checking duplicate listen URIs. Duplicate listen URIs should be rejected anyways. public void EndpointDispatcherAddTest8() { var uri = CreateAvailableUri("http://localhost:37564"); ServiceHost h = new ServiceHost(typeof(TestContract), uri); var listener = new MyChannelListener <IReplyChannel> (uri); MyChannelDispatcher d = new MyChannelDispatcher(listener); var ed = new EndpointDispatcher(new EndpointAddress(uri), "", ""); d.Endpoints.Add(ed); ed.DispatchRuntime.Type = typeof(TestContract); d.MessageVersion = MessageVersion.Default; // add service endpoint to open the host (unlike all tests above). h.AddServiceEndpoint(typeof(TestContract), new BasicHttpBinding(), uri.ToString()); h.ChannelDispatchers.Clear(); h.ChannelDispatchers.Add(d); Assert.AreEqual(h, d.Host, "#0"); try { h.Open(TimeSpan.FromSeconds(10)); Assert.AreEqual(3, h.ChannelDispatchers.Count, "#0"); // TestContract, d, mex Assert.IsTrue(listener.BeginAcceptChannelTried, "#1"); // while it throws NIE ... Assert.IsFalse(listener.WaitForChannelTried, "#2"); Assert.IsNotNull(ed.DispatchRuntime, "#3"); Assert.IsNull(ed.DispatchRuntime.InstanceProvider, "#4"); Assert.IsNotNull(ed.DispatchRuntime.InstanceContextProvider, "#5"); // it was set after ServiceHost.Open(). Assert.IsNull(ed.DispatchRuntime.SingletonInstanceContext, "#6"); /* * var l = new HttpListener (); * l.Prefixes.Add (uri.ToString ()); * l.Start (); * l.Stop (); */ } finally { h.Close(TimeSpan.FromSeconds(10)); h.Abort(); } }
public void Collection_Add_Remove() { Console.WriteLine("STart test Collection_Add_Remove"); var uri = CreateAvailableUri("http://localhost:37564"); ServiceHost h = new ServiceHost(typeof(TestContract), uri); h.AddServiceEndpoint(typeof(TestContract).FullName, new BasicHttpBinding(), "address"); MyChannelDispatcher d = new MyChannelDispatcher(new MyChannelListener(uri)); h.ChannelDispatchers.Add(d); Assert.IsTrue(d.Attached, "#1"); h.ChannelDispatchers.Remove(d); Assert.IsFalse(d.Attached, "#2"); h.ChannelDispatchers.Insert(0, d); Assert.IsTrue(d.Attached, "#3"); h.ChannelDispatchers.Add(new MyChannelDispatcher(new MyChannelListener(uri))); h.ChannelDispatchers.Clear(); Assert.IsFalse(d.Attached, "#4"); }
[ExpectedException(typeof(InvalidOperationException))] // i.e. it is thrown synchronously in current thread. public void EndpointDispatcherAddTest5() { var uri = CreateAvailableUri("http://localhost:37564"); ServiceHost h = new ServiceHost(typeof(TestContract), uri); var binding = new BasicHttpBinding(); var listener = new MyChannelListener(uri); MyChannelDispatcher d = new MyChannelDispatcher(listener); var ed = new EndpointDispatcher(new EndpointAddress(uri), "", ""); d.Endpoints.Add(ed); ed.DispatchRuntime.Type = typeof(TestContract); // different from Test4 d.MessageVersion = MessageVersion.Default; h.ChannelDispatchers.Add(d); // It rejects "unrecognized type" of the channel listener. // Test6 uses IChannelListener<IReplyChannel> and works. d.Open(); // should not reach here, but in case it didn't, it must be closed. d.Close(TimeSpan.FromSeconds(10)); }