コード例 #1
0
 /// <summary>
 /// Adds the binding parameters.
 /// </summary>
 /// <param name="serviceDescription">The description.</param>
 /// <param name="serviceHostBase">The service host base.</param>
 /// <param name="endpoints">The endpoints.</param>
 /// <param name="bindingParameters">The parameters.</param>
 public void AddBindingParameters(
     ServiceDescription serviceDescription,
     ServiceHostBase serviceHostBase,
     Collection <ServiceEndpoint> endpoints,
     BindingParameterCollection bindingParameters)
 {
     _serviceBehavior.AddBindingParameters(serviceDescription, serviceHostBase, endpoints, bindingParameters);
 }
コード例 #2
0
        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();
            }
        }
コード例 #4
0
        public void OpenListenerNoPrivateKeyInServiceCertificate()
        {
            CustomBinding rb = CreateBinding();
            BindingParameterCollection bpl =
                new BindingParameterCollection();
            ServiceCredentials cred = new ServiceCredentials();

            cred.ServiceCertificate.Certificate =
                new X509Certificate2("Test/Resources/test.cer");
            IServiceBehavior sb = cred;

            sb.AddBindingParameters(null, null, null, bpl);
            IChannelListener <IReplyChannel> listener = rb.BuildChannelListener <IReplyChannel> (bpl);

            listener.Open();
        }
コード例 #5
0
        IChannelListener <IReplyChannel> CreateListener(ReplyHandler handler, RequestReceiver receiver)
        {
            CustomBinding rb = CreateBinding(handler, receiver);
            BindingParameterCollection bpl =
                new BindingParameterCollection();
            ServiceCredentials cred = new ServiceCredentials();

            cred.ServiceCertificate.Certificate =
                new X509Certificate2("Test/Resources/test.pfx", "mono");
            IServiceBehavior sb = cred;

            sb.AddBindingParameters(null, null, null, bpl);
            IChannelListener <IReplyChannel> listener = rb.BuildChannelListener <IReplyChannel> (bpl);

            return(listener);
        }
コード例 #6
0
        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++;
            }
        }
コード例 #7
0
 public void AddBindingParameters(ServiceDescription serviceDescription, System.ServiceModel.ServiceHostBase serviceHostBase, System.Collections.ObjectModel.Collection <ServiceEndpoint> endpoints, System.ServiceModel.Channels.BindingParameterCollection bindingParameters)
 {
     _instance.AddBindingParameters(serviceDescription, serviceHostBase, endpoints, bindingParameters);
 }