private static void ValidateDescription(ServiceHostBase serviceHost) { var description = serviceHost.Description; description.EnsureInvariants(); // TODO: Reenable SecurityValidationBehavior validation //(SecurityValidationBehavior.Instance as IServiceBehavior).Validate(description, serviceHost); (new UniqueContractNameValidationBehavior() as IServiceBehavior).Validate(description, serviceHost); for (int i = 0; i < description.Behaviors.Count; i++) { IServiceBehavior iServiceBehavior = description.Behaviors[i]; iServiceBehavior.Validate(description, serviceHost); } for (int i = 0; i < description.Endpoints.Count; i++) { ServiceEndpoint endpoint = description.Endpoints[i]; ContractDescription contract = endpoint.Contract; bool alreadyProcessedThisContract = false; for (int j = 0; j < i; j++) { if (description.Endpoints[j].Contract == contract) { alreadyProcessedThisContract = true; break; } } endpoint.ValidateForService(!alreadyProcessedThisContract); } }
public void Validate() { var b = new ServiceAuthorizationBehavior(); IServiceBehavior sb = b; sb.Validate(new ServiceDescription(), new ServiceHost(typeof(object))); }
public void Use2() { // This time with ServiceDiscoveryBehavior. var b = new EndpointDiscoveryBehavior(); IEndpointBehavior eb = b; var host = new ServiceHost(typeof(TestService)); var se = host.AddServiceEndpoint(typeof(ITestService), new BasicHttpBinding(), new Uri("http://localhost:37564")); var sdb = new ServiceDiscoveryBehavior(); sdb.AnnouncementEndpoints.Add(new UdpAnnouncementEndpoint()); IServiceBehavior sb = sdb; se.Behaviors.Add(b); var bc = new BindingParameterCollection(); sb.AddBindingParameters(host.Description, host, host.Description.Endpoints, bc); eb.AddBindingParameters(se, bc); Assert.AreEqual(0, bc.Count, "#1"); Assert.AreEqual(0, host.Extensions.Count, "#1-2"); sb.Validate(host.Description, host); eb.Validate(se); // ... should "validate" not "apply dispatch behavior" do "add host extension" job? I doubt that. Assert.AreEqual(1, host.Extensions.Count, "#2-2"); var dse = host.Extensions.Find <DiscoveryServiceExtension> (); Assert.IsNotNull(dse, "#2-3"); Assert.AreEqual(0, dse.PublishedEndpoints.Count, "#2-4"); Assert.AreEqual(2, se.Behaviors.Count, "#2-5"); // EndpointDiscoveryBehavior + discovery initializer. Assert.AreEqual(0, host.ChannelDispatchers.Count, "#3-1"); Assert.AreEqual(1, host.Description.Endpoints.Count, "#3-2"); Assert.AreEqual(0, dse.PublishedEndpoints.Count, "#3-4"); // The IEndpointBehavior from EndpointDiscoveryBehavior, when ApplyDispatchBehavior() is invoked, publishes an endpoint. sb.ApplyDispatchBehavior(host.Description, host); Assert.AreEqual(0, dse.PublishedEndpoints.Count, "#3-5"); // not yet published eb.ApplyDispatchBehavior(se, new EndpointDispatcher(new EndpointAddress("http://localhost:37564"), "ITestService", "http://tempuri.org/")); Assert.AreEqual(2, host.ChannelDispatchers.Count, "#3-6-1"); // for online and offline announcements Assert.AreEqual(0, dse.PublishedEndpoints.Count, "#3-6-2"); // still not published. host.Open(); try { Assert.AreEqual(3, host.ChannelDispatchers.Count, "#4-1"); // for online and offline announcements Assert.AreEqual(1, dse.PublishedEndpoints.Count, "#4-2"); // The endpoint is published again. (Not sure if it's worthy of testing.) } finally { host.Close(); } }
public void UseHttpBinding() { var ahost = new ServiceHost(typeof(AnnouncementService)); var aendpoint = new AnnouncementEndpoint(new CustomBinding(new HttpTransportBindingElement()), new EndpointAddress("http://localhost:4989")); var ib = new InspectionBehavior(); object state = new object(); ib.RequestReceived += delegate { InspectionBehavior.State = state; return(null); }; aendpoint.Behaviors.Add(ib); ahost.AddServiceEndpoint(aendpoint); ahost.Open(); try { Assert.IsTrue(ib.DispatchBehaviorApplied, "#1"); var b = new ServiceDiscoveryBehavior(); b.AnnouncementEndpoints.Add(new AnnouncementEndpoint(new CustomBinding(new HttpTransportBindingElement()), new EndpointAddress("http://localhost:4989"))); IServiceBehavior sb = b; var host = new ServiceHost(typeof(TestService)); var se = host.AddServiceEndpoint(typeof(ITestService), new BasicHttpBinding(), new Uri("http://localhost:37564")); var bc = new BindingParameterCollection(); sb.AddBindingParameters(host.Description, host, host.Description.Endpoints, bc); sb.Validate(host.Description, host); // ... should "validate" not "apply dispatch behavior" do "add host extension" job? I doubt that. var dse = host.Extensions.Find <DiscoveryServiceExtension> (); Assert.IsNotNull(dse, "#2"); sb.ApplyDispatchBehavior(host.Description, host); // The IEndpointBehavior from ServiceDiscoveryBehavior, when ApplyDispatchBehavior() is invoked, publishes an endpoint. se.Behaviors [0].ApplyDispatchBehavior(se, new EndpointDispatcher(new EndpointAddress("http://localhost:37564"), "ITestService", "http://tempuri.org/")); host.Open(); try { Assert.AreEqual(state, InspectionBehavior.State, "#3"); } finally { host.Close(); } } finally { ahost.Close(); } }
public void Use() { var b = new ServiceDiscoveryBehavior(); b.AnnouncementEndpoints.Add(new UdpAnnouncementEndpoint()); IServiceBehavior sb = b; var host = new ServiceHost(new Uri("http://localhost:37564")); var bc = new BindingParameterCollection(); sb.AddBindingParameters(host.Description, host, host.Description.Endpoints, bc); Assert.AreEqual(0, bc.Count, "#1"); Assert.AreEqual(0, host.Extensions.Count, "#2-1"); sb.Validate(host.Description, host); // ... should "validate" not "apply dispatch behavior" do "add host extension" job? I doubt that. Assert.AreEqual(1, host.Extensions.Count, "#2-2"); var dse = host.Extensions.Find <DiscoveryServiceExtension> (); Assert.IsNotNull(dse, "#2-3"); Assert.AreEqual(0, dse.PublishedEndpoints.Count, "#2-4"); Assert.AreEqual(0, host.ChannelDispatchers.Count, "#3-1"); sb.ApplyDispatchBehavior(host.Description, host); Assert.AreEqual(0, host.Description.Endpoints.Count, "#3-2"); Assert.AreEqual(2, host.ChannelDispatchers.Count, "#3-3"); // for online and offline announcements Assert.AreEqual(0, dse.PublishedEndpoints.Count, "#3-4"); // discovery endpoints are not "published" int idx = 0; foreach (var cdisb in host.ChannelDispatchers) { var cdis = cdisb as ChannelDispatcher; string head = "#4." + idx + "."; Assert.IsNull(cdis, head + "dispatcher"); if (cdisb.Listener != null) { Assert.AreEqual("urn:schemas-microsoft-org:ws:2008:07:discovery", cdisb.Listener.Uri.ToString(), head + "uri"); } // else ... WHOA! .NET "OnlineAnnouncementChannelDispatcher" type does not seem to provide the listener. idx++; } }
/// <summary> /// Validates the specified description. /// </summary> /// <param name="serviceDescription">The description.</param> /// <param name="serviceHostBase">The service host base.</param> public void Validate( ServiceDescription serviceDescription, ServiceHostBase serviceHostBase) { _serviceBehavior.Validate(serviceDescription, serviceHostBase); }
public void Validate(ServiceDescription serviceDescription, System.ServiceModel.ServiceHostBase serviceHostBase) { _instance.Validate(serviceDescription, serviceHostBase); }