Пример #1
0
        private static void ConfigureRouterViaCode(ServiceHost host)
        {
            //configure a MSMQ Binding that is not very tolerant of failures.
            MsmqTransportBindingElement msmqbe = new MsmqTransportBindingElement();

            //Set the auth mode and protection levels to none so that we can run without
            //Active Directory using Private queues.
            msmqbe.MsmqTransportSecurity.MsmqAuthenticationMode = MsmqAuthenticationMode.None;
            msmqbe.MsmqTransportSecurity.MsmqProtectionLevel    = System.Net.Security.ProtectionLevel.None;

            //when the Routing Service receives a message and is unable to process it, we should reject it.
            //This will result in the message being placed in the "inbound" queue's System Dead Letter Queue.
            msmqbe.ReceiveErrorHandling = ReceiveErrorHandling.Reject;
            msmqbe.DeadLetterQueue      = DeadLetterQueue.System;

            //Set the retry count, retry cycles, and delay to very unreasonable values
            //If the message cannot be delivered to the destination Queue on the first try
            //report an error. This error will be noticed by the Routing Service's error
            //handling code, which will automatically move the message to the backup endpoints
            //defined, if available.
            msmqbe.ReceiveRetryCount = 0;
            msmqbe.MaxRetryCycles    = 0;
            msmqbe.RetryCycleDelay   = TimeSpan.FromMilliseconds(1);

            //create the MSMQ Binding with our custom settings
            Binding QueueBinding = new CustomBinding(new BinaryMessageEncodingBindingElement(), msmqbe);

            //add a service endpoint to the host.  This is the endpoint on the Routing Service
            //that reads from the queue.
            host.AddServiceEndpoint(typeof(ISimplexDatagramRouter), QueueBinding, inboundQ);

            //create a new RoutingConfiguration object.
            RoutingConfiguration rc = new RoutingConfiguration();

            //create the service endpoints that the Routing Service will communicate with
            ServiceEndpoint primaryService = new ServiceEndpoint(cd, QueueBinding, new EndpointAddress(primaryServiceQueue));
            ServiceEndpoint backupService  = new ServiceEndpoint(cd, QueueBinding, new EndpointAddress(backupServiceQueue));
            ServiceEndpoint primaryLogging = new ServiceEndpoint(cd, QueueBinding, new EndpointAddress(primaryLoggingQueue));
            ServiceEndpoint backupLogging  = new ServiceEndpoint(cd, QueueBinding, new EndpointAddress(backupLoggingQueue));

            //we always want the message to go to both a service endpoint and a logging endpoint
            //the way we achieve this is "multicasting" the message to both destinations at the same time
            //additionally, since we're both the inbound and outbound queues are transactional, if either none of the service queues
            //or none of the logging queues are able to Transactionally recieve the message, then the Routing Service
            //will report to the originating system that the message was unable to be delivered, at which point the
            //originating queue will put the message in it's system Dead Letter Queue.

            //add the primary service queue and the backup service queue endpoint
            rc.FilterTable.Add(new MatchAllMessageFilter(), new List <ServiceEndpoint> {
                primaryService, backupService
            });

            //add the primary logging queue and the backup logging queue endpoint
            rc.FilterTable.Add(new MatchAllMessageFilter(), new List <ServiceEndpoint> {
                primaryLogging, backupLogging
            });

            //add the RoutingBehavior to the Service
            host.Description.Behaviors.Add(new RoutingBehavior(rc));
        }
        public override BindingElementCollection CreateBindingElements()
        {
            BinaryMessageEncodingBindingElement be =
                new BinaryMessageEncodingBindingElement();

            quotas.CopyTo(be.ReaderQuotas);
            MsmqTransportBindingElement te =
                new MsmqTransportBindingElement();

            te.MaxPoolSize           = (int)MaxBufferPoolSize;
            te.QueueTransferProtocol = QueueTransferProtocol;
            te.UseActiveDirectory    = UseActiveDirectory;
            te.CustomDeadLetterQueue = CustomDeadLetterQueue;
            te.DeadLetterQueue       = DeadLetterQueue;
            te.Durable                = Durable;
            te.ExactlyOnce            = ExactlyOnce;
            te.MaxReceivedMessageSize = MaxReceivedMessageSize;
            te.MaxRetryCycles         = MaxRetryCycles;
            te.MsmqTransportSecurity.MsmqAuthenticationMode  = Security.Transport.MsmqAuthenticationMode;
            te.MsmqTransportSecurity.MsmqEncryptionAlgorithm = Security.Transport.MsmqEncryptionAlgorithm;
            te.MsmqTransportSecurity.MsmqProtectionLevel     = Security.Transport.MsmqProtectionLevel;
            te.MsmqTransportSecurity.MsmqSecureHashAlgorithm = Security.Transport.MsmqSecureHashAlgorithm;
            te.ReceiveErrorHandling = ReceiveErrorHandling;
            te.ReceiveRetryCount    = ReceiveRetryCount;
            te.RetryCycleDelay      = RetryCycleDelay;
            te.TimeToLive           = TimeToLive;
            te.UseMsmqTracing       = UseMsmqTracing;
            te.UseSourceJournal     = UseSourceJournal;

            return(new BindingElementCollection(new BindingElement [] { be, te }));
        }
Пример #3
0
 public static void Snippet6()
 {
     // <Snippet6>
     MsmqTransportBindingElement transportBindingElement = new MsmqTransportBindingElement();
     BindingElement bindingElement = transportBindingElement.Clone();
     // </Snippet6>
 }
Пример #4
0
 internal MsmqTransportReceiveParameters(MsmqTransportBindingElement bindingElement, MsmqUri.IAddressTranslator addressTranslator)
     : base(bindingElement, addressTranslator)
 {
     this.maxPoolSize           = bindingElement.MaxPoolSize;
     this.useActiveDirectory    = bindingElement.UseActiveDirectory;
     this.queueTransferProtocol = bindingElement.QueueTransferProtocol;
 }
Пример #5
0
 public static void Snippet4()
 {
     // <Snippet4>
     MsmqTransportBindingElement transportBindingElement = new MsmqTransportBindingElement();
     string scheme = transportBindingElement.Scheme;
     // </Snippet4>
 }
 internal MsmqTransportReceiveParameters(MsmqTransportBindingElement bindingElement, MsmqUri.IAddressTranslator addressTranslator)
     : base(bindingElement, addressTranslator)
 {
     this.maxPoolSize = bindingElement.MaxPoolSize;
     this.useActiveDirectory = bindingElement.UseActiveDirectory;
     this.queueTransferProtocol = bindingElement.QueueTransferProtocol;
 }
Пример #7
0
        public static void Snippet3()
        {
            // <Snippet3>
            MsmqTransportBindingElement transportBindingElement = new MsmqTransportBindingElement();

            transportBindingElement.QueueTransferProtocol = QueueTransferProtocol.Native;
            // </Snippet3>
        }
Пример #8
0
        public static void Snippet2()
        {
            // <Snippet2>
            MsmqTransportBindingElement transportBindingElement = new MsmqTransportBindingElement();

            transportBindingElement.MaxPoolSize = 5;
            // </Snippet2>
        }
Пример #9
0
        public static void Snippet5()
        {
            // <Snippet5>
            MsmqTransportBindingElement transportBindingElement = new MsmqTransportBindingElement();

            transportBindingElement.UseActiveDirectory = true;
            // </Snippet5>
        }
        public override void ApplyConfiguration(BindingElement bindingElement)
        {
            base.ApplyConfiguration(bindingElement);
            MsmqTransportBindingElement element = bindingElement as MsmqTransportBindingElement;

            element.MaxPoolSize           = this.MaxPoolSize;
            element.QueueTransferProtocol = this.QueueTransferProtocol;
            element.UseActiveDirectory    = this.UseActiveDirectory;
        }
        protected internal override void InitializeFrom(BindingElement bindingElement)
        {
            base.InitializeFrom(bindingElement);
            MsmqTransportBindingElement binding = bindingElement as MsmqTransportBindingElement;

            SetPropertyValueIfNotDefaultValue(ConfigurationStrings.MaxPoolSize, binding.MaxPoolSize);
            SetPropertyValueIfNotDefaultValue(ConfigurationStrings.QueueTransferProtocol, binding.QueueTransferProtocol);
            SetPropertyValueIfNotDefaultValue(ConfigurationStrings.UseActiveDirectory, binding.UseActiveDirectory);
        }
Пример #12
0
 private static bool IsValidTransport(MsmqTransportBindingElement msmq, out UnifiedSecurityMode mode)
 {
     mode = 0;
     if (msmq == null)
     {
         return(false);
     }
     return(NetMsmqSecurity.IsConfiguredTransportSecurity(msmq, out mode));
 }
        protected internal override void InitializeFrom(BindingElement bindingElement)
        {
            base.InitializeFrom(bindingElement);
            MsmqTransportBindingElement element = bindingElement as MsmqTransportBindingElement;

            this.MaxPoolSize           = element.MaxPoolSize;
            this.QueueTransferProtocol = element.QueueTransferProtocol;
            this.UseActiveDirectory    = element.UseActiveDirectory;
        }
Пример #14
0
        internal static bool TryCreate(BindingElementCollection elements, out Binding binding)
        {
            UnifiedSecurityMode mode;
            NetMsmqSecurity     security;

            binding = null;
            if (elements.Count > 3)
            {
                return(false);
            }
            SecurityBindingElement sbe = null;
            BinaryMessageEncodingBindingElement encoding = null;
            MsmqTransportBindingElement         msmq     = null;

            foreach (BindingElement element4 in elements)
            {
                if (element4 is SecurityBindingElement)
                {
                    sbe = element4 as SecurityBindingElement;
                }
                else if (element4 is TransportBindingElement)
                {
                    msmq = element4 as MsmqTransportBindingElement;
                }
                else if (element4 is MessageEncodingBindingElement)
                {
                    encoding = element4 as BinaryMessageEncodingBindingElement;
                }
                else
                {
                    return(false);
                }
            }
            if (!IsValidTransport(msmq, out mode))
            {
                return(false);
            }
            if (encoding == null)
            {
                return(false);
            }
            if (!TryCreateSecurity(sbe, mode, out security))
            {
                return(false);
            }
            NetMsmqBinding binding2 = new NetMsmqBinding(security);

            binding2.InitializeFrom(msmq, encoding);
            if (!binding2.IsBindingElementsMatch(msmq, encoding))
            {
                return(false);
            }
            binding = binding2;
            return(true);
        }
        public void ExportPolicyDefault()
        {
            MsmqBindingElementBase  binding_element    = new MsmqTransportBindingElement();
            IPolicyExportExtension  export_extension   = binding_element as IPolicyExportExtension;
            PolicyConversionContext conversion_context = new CustomPolicyConversionContext();

            export_extension.ExportPolicy(new WsdlExporter(), conversion_context);

            PolicyAssertionCollection binding_assertions = conversion_context.GetBindingAssertions();
            BindingElementCollection  binding_elements   = conversion_context.BindingElements;

            Assert.AreEqual(4, binding_assertions.Count, "#A0");
            Assert.AreEqual(0, binding_elements.Count, "#A1");

            // wsaw:UsingAddressing
            XmlNode using_addressing_node = FindAssertion(binding_assertions, "wsaw:UsingAddressing");

            Assert.AreEqual(true, using_addressing_node != null, "#B0");
            Assert.AreEqual("UsingAddressing", using_addressing_node.LocalName, "#B1");
            Assert.AreEqual("http://www.w3.org/2006/05/addressing/wsdl", using_addressing_node.NamespaceURI, "#B2");
            Assert.AreEqual(String.Empty, using_addressing_node.InnerText, "#B3");
            Assert.AreEqual(0, using_addressing_node.Attributes.Count, "#B4");
            Assert.AreEqual(0, using_addressing_node.ChildNodes.Count, "#B5");

            // msb:BinaryEncoding
            XmlNode binary_encoding_node = FindAssertion(binding_assertions, "msb:BinaryEncoding");

            Assert.AreEqual(true, binary_encoding_node != null, "#C0");
            Assert.AreEqual("BinaryEncoding", binary_encoding_node.LocalName, "#C1");
            Assert.AreEqual("http://schemas.microsoft.com/ws/06/2004/mspolicy/netbinary1", binary_encoding_node.NamespaceURI, "#C2");
            Assert.AreEqual(String.Empty, binary_encoding_node.InnerText, "#C3");
            Assert.AreEqual(0, binary_encoding_node.Attributes.Count, "#C4");
            Assert.AreEqual(0, binary_encoding_node.ChildNodes.Count, "#C5");

            // msmq:Authenticated
            XmlNode authenticated_node = FindAssertion(binding_assertions, "msmq:Authenticated");

            Assert.AreEqual(true, authenticated_node != null, "#D0");
            Assert.AreEqual("Authenticated", authenticated_node.LocalName, "#D1");
            Assert.AreEqual("http://schemas.microsoft.com/ws/06/2004/mspolicy/msmq", authenticated_node.NamespaceURI, "#D2");
            Assert.AreEqual(String.Empty, authenticated_node.InnerText, "#D3");
            Assert.AreEqual(0, authenticated_node.Attributes.Count, "#D4");
            Assert.AreEqual(0, authenticated_node.ChildNodes.Count, "#D5");

            // msmq:WindowsDomain
            XmlNode domain_node = FindAssertion(binding_assertions, "msmq:WindowsDomain");

            Assert.AreEqual(true, domain_node != null, "#E0");
            Assert.AreEqual("WindowsDomain", domain_node.LocalName, "#E1");
            Assert.AreEqual("http://schemas.microsoft.com/ws/06/2004/mspolicy/msmq", domain_node.NamespaceURI, "#E2");
            Assert.AreEqual(String.Empty, domain_node.InnerText, "#E3");
            Assert.AreEqual(0, domain_node.Attributes.Count, "#E4");
            Assert.AreEqual(0, domain_node.ChildNodes.Count, "#E5");
        }
Пример #16
0
 private bool IsBindingElementsMatch(MsmqTransportBindingElement transport, MessageEncodingBindingElement encoding)
 {
     if (!this.GetTransport().IsMatch(transport))
     {
         return(false);
     }
     if (!this.encoding.IsMatch(encoding))
     {
         return(false);
     }
     return(true);
 }
Пример #17
0
        public static void Snippet8()
        {
            BinaryMessageEncodingBindingElement encodingBindingElement  = new BinaryMessageEncodingBindingElement();
            MsmqTransportBindingElement         transportBindingElement = new MsmqTransportBindingElement();
            CustomBinding binding = new CustomBinding(encodingBindingElement, transportBindingElement);
            BindingParameterCollection bindingParams = new BindingParameterCollection();
            BindingContext             context       = new BindingContext(binding, bindingParams);

            // <Snippet8>
            transportBindingElement.BuildChannelListener <IInputChannel>(context);
            // </Snippet8>
        }
Пример #18
0
        // check that properties of the HttpTransportBindingElement and
        // MessageEncodingBindingElement not exposed as properties on NetMsmqBinding
        // match default values of the binding elements
        bool IsBindingElementsMatch(MsmqTransportBindingElement transport, MessageEncodingBindingElement encoding)
        {
            // we do not have to check the transport match here: they always match
            if (!this.GetTransport().IsMatch(transport))
            {
                return(false);
            }

            if (!this.encoding.IsMatch(encoding))
            {
                return(false);
            }
            return(true);
        }
Пример #19
0
        public static void Snippet9()
        {
            BinaryMessageEncodingBindingElement encodingBindingElement  = new BinaryMessageEncodingBindingElement();
            MsmqTransportBindingElement         transportBindingElement = new MsmqTransportBindingElement();
            CustomBinding binding = new CustomBinding(encodingBindingElement, transportBindingElement);
            BindingParameterCollection bindingParams = new BindingParameterCollection();
            BindingContext             context       = new BindingContext(binding, bindingParams);

            // <Snippet9>
            if (transportBindingElement.CanBuildChannelFactory <IOutputChannel>(context))
            {
                // Do something...
            }
            // </Snippet9>
        }
Пример #20
0
		public void ExportPolicyDefault ()
		{
			MsmqBindingElementBase binding_element = new MsmqTransportBindingElement ();
			IPolicyExportExtension export_extension = binding_element as IPolicyExportExtension;
			PolicyConversionContext conversion_context = new CustomPolicyConversionContext ();
			export_extension.ExportPolicy (new WsdlExporter (), conversion_context);

			PolicyAssertionCollection binding_assertions = conversion_context.GetBindingAssertions ();
			BindingElementCollection binding_elements = conversion_context.BindingElements;
			Assert.AreEqual (4, binding_assertions.Count, "#A0");
			Assert.AreEqual (0, binding_elements.Count, "#A1");

			// wsaw:UsingAddressing
			XmlNode using_addressing_node = FindAssertion (binding_assertions, "wsaw:UsingAddressing");
			Assert.AreEqual (true, using_addressing_node != null, "#B0");
			Assert.AreEqual ("UsingAddressing", using_addressing_node.LocalName, "#B1");
			Assert.AreEqual ("http://www.w3.org/2006/05/addressing/wsdl", using_addressing_node.NamespaceURI, "#B2");
			Assert.AreEqual (String.Empty, using_addressing_node.InnerText, "#B3");
			Assert.AreEqual (0, using_addressing_node.Attributes.Count, "#B4");
			Assert.AreEqual (0, using_addressing_node.ChildNodes.Count, "#B5");

			// msb:BinaryEncoding
			XmlNode binary_encoding_node = FindAssertion (binding_assertions, "msb:BinaryEncoding");
			Assert.AreEqual (true, binary_encoding_node != null, "#C0");
			Assert.AreEqual ("BinaryEncoding", binary_encoding_node.LocalName, "#C1");
			Assert.AreEqual ("http://schemas.microsoft.com/ws/06/2004/mspolicy/netbinary1", binary_encoding_node.NamespaceURI, "#C2");
			Assert.AreEqual (String.Empty, binary_encoding_node.InnerText, "#C3");
			Assert.AreEqual (0, binary_encoding_node.Attributes.Count, "#C4");
			Assert.AreEqual (0, binary_encoding_node.ChildNodes.Count, "#C5");

			// msmq:Authenticated
			XmlNode authenticated_node = FindAssertion (binding_assertions, "msmq:Authenticated");
			Assert.AreEqual (true, authenticated_node != null, "#D0");
			Assert.AreEqual ("Authenticated", authenticated_node.LocalName, "#D1");
			Assert.AreEqual ("http://schemas.microsoft.com/ws/06/2004/mspolicy/msmq", authenticated_node.NamespaceURI, "#D2");
			Assert.AreEqual (String.Empty, authenticated_node.InnerText, "#D3");
			Assert.AreEqual (0, authenticated_node.Attributes.Count, "#D4");
			Assert.AreEqual (0, authenticated_node.ChildNodes.Count, "#D5");

			// msmq:WindowsDomain
			XmlNode domain_node = FindAssertion (binding_assertions, "msmq:WindowsDomain");
			Assert.AreEqual (true, domain_node != null, "#E0");
			Assert.AreEqual ("WindowsDomain", domain_node.LocalName, "#E1");
			Assert.AreEqual ("http://schemas.microsoft.com/ws/06/2004/mspolicy/msmq", domain_node.NamespaceURI, "#E2");
			Assert.AreEqual (String.Empty, domain_node.InnerText, "#E3");
			Assert.AreEqual (0, domain_node.Attributes.Count, "#E4");
			Assert.AreEqual (0, domain_node.ChildNodes.Count, "#E5");
		}
 internal static bool IsConfiguredTransportSecurity(MsmqTransportBindingElement msmq, out UnifiedSecurityMode mode)
 {
     if (msmq == null)
     {
         mode = UnifiedSecurityMode.None;
         return false;
     }
     if (msmq.MsmqTransportSecurity.Enabled)
     {
         mode = UnifiedSecurityMode.Both | UnifiedSecurityMode.Transport;
     }
     else
     {
         mode = UnifiedSecurityMode.Message | UnifiedSecurityMode.None;
     }
     return true;
 }
Пример #22
0
 internal static bool IsConfiguredTransportSecurity(MsmqTransportBindingElement msmq, out UnifiedSecurityMode mode)
 {
     if (msmq == null)
     {
         mode = UnifiedSecurityMode.None;
         return(false);
     }
     if (msmq.MsmqTransportSecurity.Enabled)
     {
         mode = UnifiedSecurityMode.Both | UnifiedSecurityMode.Transport;
     }
     else
     {
         mode = UnifiedSecurityMode.Message | UnifiedSecurityMode.None;
     }
     return(true);
 }
		public void CanBuildChannelFactory ()
		{
			MsmqTransportBindingElement be =
				new MsmqTransportBindingElement ();
			BindingContext ctx = new BindingContext (
				new CustomBinding (), empty_params);
			Assert.IsFalse (be.CanBuildChannelFactory<IRequestChannel> (ctx), "#1");
			Assert.IsFalse (be.CanBuildChannelFactory<IInputChannel> (ctx), "#2");
			Assert.IsFalse (be.CanBuildChannelFactory<IReplyChannel> (ctx), "#3");
			Assert.IsTrue (be.CanBuildChannelFactory<IOutputChannel> (ctx), "#4");
			Assert.IsFalse (be.CanBuildChannelFactory<IRequestSessionChannel> (ctx), "#5");
			Assert.IsFalse (be.CanBuildChannelFactory<IInputSessionChannel> (ctx), "#6");
			Assert.IsFalse (be.CanBuildChannelFactory<IReplySessionChannel> (ctx), "#7");
			Assert.IsTrue (be.CanBuildChannelFactory<IOutputSessionChannel> (ctx), "#8");

			// IServiceChannel is not supported
			Assert.IsFalse (be.CanBuildChannelListener<IServiceChannel> (ctx), "#9");
		}
        public void CanBuildChannelListener()
        {
            MsmqTransportBindingElement be =
                new MsmqTransportBindingElement();
            BindingContext ctx = new BindingContext(
                new CustomBinding(), empty_params);

            Assert.IsFalse(be.CanBuildChannelListener <IReplyChannel> (ctx), "#1");
            Assert.IsFalse(be.CanBuildChannelListener <IOutputChannel> (ctx), "#2");
            Assert.IsFalse(be.CanBuildChannelListener <IRequestChannel> (ctx), "#3");
            Assert.IsTrue(be.CanBuildChannelListener <IInputChannel> (ctx), "#4");
            Assert.IsFalse(be.CanBuildChannelListener <IReplySessionChannel> (ctx), "#5");
            Assert.IsFalse(be.CanBuildChannelListener <IOutputSessionChannel> (ctx), "#6");
            Assert.IsFalse(be.CanBuildChannelListener <IRequestSessionChannel> (ctx), "#7");
            Assert.IsTrue(be.CanBuildChannelListener <IInputSessionChannel> (ctx), "#8");

            // IServiceChannel is not supported
            Assert.IsFalse(be.CanBuildChannelListener <IServiceChannel> (ctx), "#9");
        }
Пример #25
0
 private void InitializeFrom(MsmqTransportBindingElement transport, BinaryMessageEncodingBindingElement encoding)
 {
     base.CustomDeadLetterQueue = transport.CustomDeadLetterQueue;
     base.DeadLetterQueue       = transport.DeadLetterQueue;
     base.Durable                = transport.Durable;
     base.ExactlyOnce            = transport.ExactlyOnce;
     base.MaxReceivedMessageSize = transport.MaxReceivedMessageSize;
     base.ReceiveRetryCount      = transport.ReceiveRetryCount;
     base.MaxRetryCycles         = transport.MaxRetryCycles;
     base.ReceiveErrorHandling   = transport.ReceiveErrorHandling;
     base.RetryCycleDelay        = transport.RetryCycleDelay;
     base.TimeToLive             = transport.TimeToLive;
     base.UseSourceJournal       = transport.UseSourceJournal;
     base.UseMsmqTracing         = transport.UseMsmqTracing;
     base.ReceiveContextEnabled  = transport.ReceiveContextEnabled;
     this.QueueTransferProtocol  = transport.QueueTransferProtocol;
     this.MaxBufferPoolSize      = transport.MaxBufferPoolSize;
     this.UseActiveDirectory     = transport.UseActiveDirectory;
     base.ValidityDuration       = transport.ValidityDuration;
     this.ReaderQuotas           = encoding.ReaderQuotas;
 }
Пример #26
0
        public static void InsertMessageIntoQueue(string queuePath)
        {
            MsmqTransportBindingElement msmqbe = new MsmqTransportBindingElement();
            msmqbe.MsmqTransportSecurity.MsmqAuthenticationMode = MsmqAuthenticationMode.None;
            msmqbe.MsmqTransportSecurity.MsmqProtectionLevel = System.Net.Security.ProtectionLevel.None;

            Binding QueueBinding = new CustomBinding(new BinaryMessageEncodingBindingElement(), msmqbe);

            IQueueContractClient client = ChannelFactory<IQueueContractClient>.CreateChannel(QueueBinding, new EndpointAddress(queuePath));
            System.ServiceModel.Channels.Message msg = System.ServiceModel.Channels.Message.CreateMessage(QueueBinding.MessageVersion, "MSMQMessage", (object)"bodyData");

            using (TransactionScope ts = new TransactionScope())
            {
                
                client.OneWayMessage(msg);
                ts.Complete();
            }

            client.Close();
            System.Console.WriteLine("Inserted one message into the  queue at {0}", queuePath);
        }
Пример #27
0
        public static void InsertMessageIntoQueue(string queuePath)
        {
            MsmqTransportBindingElement msmqbe = new MsmqTransportBindingElement();

            msmqbe.MsmqTransportSecurity.MsmqAuthenticationMode = MsmqAuthenticationMode.None;
            msmqbe.MsmqTransportSecurity.MsmqProtectionLevel    = System.Net.Security.ProtectionLevel.None;

            Binding QueueBinding = new CustomBinding(new BinaryMessageEncodingBindingElement(), msmqbe);

            IQueueContractClient client = ChannelFactory <IQueueContractClient> .CreateChannel(QueueBinding, new EndpointAddress(queuePath));

            System.ServiceModel.Channels.Message msg = System.ServiceModel.Channels.Message.CreateMessage(QueueBinding.MessageVersion, "MSMQMessage", (object)"bodyData");

            using (TransactionScope ts = new TransactionScope())
            {
                client.OneWayMessage(msg);
                ts.Complete();
            }

            client.Close();
            System.Console.WriteLine("Inserted one message into the  queue at {0}", queuePath);
        }
        public void CreateChannelInvalidScheme()
        {
            MsmqTransportBindingElement be =
                new MsmqTransportBindingElement();

            // Without settings them, it borks when MSMQ setup
            // does not support AD integration.
            be.MsmqTransportSecurity.MsmqAuthenticationMode =
                MsmqAuthenticationMode.None;
            be.MsmqTransportSecurity.MsmqProtectionLevel =
                ProtectionLevel.None;

            BindingContext ctx = new BindingContext(
                new CustomBinding(be),
                empty_params);
            // returns MsmqChannelFactory
            IChannelFactory <IOutputChannel> f =
                ctx.BuildInnerChannelFactory <IOutputChannel> ();

            f.Open();
            f.CreateChannel(new EndpointAddress("stream:dummy"));
        }
Пример #29
0
 void InitializeFrom(MsmqTransportBindingElement transport, BinaryMessageEncodingBindingElement encoding)
 {
     // only set properties that have standard binding manifestations: MaxPoolSize *is not* one of them
     this.CustomDeadLetterQueue = transport.CustomDeadLetterQueue;
     this.DeadLetterQueue       = transport.DeadLetterQueue;
     this.Durable                = transport.Durable;
     this.ExactlyOnce            = transport.ExactlyOnce;
     this.MaxReceivedMessageSize = transport.MaxReceivedMessageSize;
     this.ReceiveRetryCount      = transport.ReceiveRetryCount;
     this.MaxRetryCycles         = transport.MaxRetryCycles;
     this.ReceiveErrorHandling   = transport.ReceiveErrorHandling;
     this.RetryCycleDelay        = transport.RetryCycleDelay;
     this.TimeToLive             = transport.TimeToLive;
     this.UseSourceJournal       = transport.UseSourceJournal;
     this.UseMsmqTracing         = transport.UseMsmqTracing;
     this.ReceiveContextEnabled  = transport.ReceiveContextEnabled;
     this.QueueTransferProtocol  = transport.QueueTransferProtocol;
     this.MaxBufferPoolSize      = transport.MaxBufferPoolSize;
     this.UseActiveDirectory     = transport.UseActiveDirectory;
     this.ValidityDuration       = transport.ValidityDuration;
     this.ReaderQuotas           = encoding.ReaderQuotas;
 }
		public void DefaultValues ()
		{
			MsmqTransportBindingElement be =
				new MsmqTransportBindingElement ();
			Assert.AreEqual (8, be.MaxPoolSize, "#1");
			Assert.AreEqual (0x80000, be.MaxBufferPoolSize, "#2");
			Assert.AreEqual (QueueTransferProtocol.Native, be.QueueTransferProtocol, "#2");
			Assert.AreEqual ("net.msmq", be.Scheme, "#3");

			Assert.IsNull (be.CustomDeadLetterQueue, "#5");
			Assert.AreEqual (DeadLetterQueue.System, be.DeadLetterQueue, "#6");
			Assert.IsTrue (be.Durable, "#7");
			Assert.IsTrue (be.ExactlyOnce, "#8");
			Assert.AreEqual (0x10000, be.MaxReceivedMessageSize, "#9");
			Assert.AreEqual (2, be.MaxRetryCycles, "#10");
			Assert.AreEqual (ReceiveErrorHandling.Fault, be.ReceiveErrorHandling, "#11");
			Assert.AreEqual (5, be.ReceiveRetryCount, "#12");
			// hmm, it is documented as 10 minutes but ...
			Assert.AreEqual (TimeSpan.FromMinutes (30), be.RetryCycleDelay, "#13");
			Assert.AreEqual (TimeSpan.FromDays (1), be.TimeToLive, "#15");
			Assert.IsFalse (be.UseMsmqTracing, "#16");
			Assert.IsFalse (be.UseSourceJournal, "#17");
		}
Пример #31
0
        public static void Main()
        {
            // <Snippet0>
            string queueName = @".\private$\ServiceModelSamples";

            if (!MessageQueue.Exists(queueName))
            {
                MessageQueue.Create(queueName, true);
            }

            using (ServiceHost serviceHost = new ServiceHost(typeof(CalculatorService)))
            {
                BinaryMessageEncodingBindingElement encodingBindingElement = new BinaryMessageEncodingBindingElement();
                // <Snippet1>
                MsmqTransportBindingElement transportBindingElement = new MsmqTransportBindingElement();
                // </Snippet1>
                CustomBinding binding = new CustomBinding(encodingBindingElement, transportBindingElement);

                serviceHost.AddServiceEndpoint(
                    typeof(IQueueCalculator),
                    binding,
                    "net.msmq://localhost/private/ServiceModelSamples");

                serviceHost.Open();

                // The service can now be accessed.
                Console.WriteLine("The service is ready.");
                Console.WriteLine("Press <ENTER> to terminate service.");
                Console.WriteLine();
                Console.ReadLine();

                // Close the ServiceHost to shutdown the service.
                serviceHost.Close();
                // </Snippet0>
            }
        }
        public void DefaultValues()
        {
            MsmqTransportBindingElement be =
                new MsmqTransportBindingElement();

            Assert.AreEqual(8, be.MaxPoolSize, "#1");
            Assert.AreEqual(0x80000, be.MaxBufferPoolSize, "#2");
            Assert.AreEqual(QueueTransferProtocol.Native, be.QueueTransferProtocol, "#2");
            Assert.AreEqual("net.msmq", be.Scheme, "#3");

            Assert.IsNull(be.CustomDeadLetterQueue, "#5");
            Assert.AreEqual(DeadLetterQueue.System, be.DeadLetterQueue, "#6");
            Assert.IsTrue(be.Durable, "#7");
            Assert.IsTrue(be.ExactlyOnce, "#8");
            Assert.AreEqual(0x10000, be.MaxReceivedMessageSize, "#9");
            Assert.AreEqual(2, be.MaxRetryCycles, "#10");
            Assert.AreEqual(ReceiveErrorHandling.Fault, be.ReceiveErrorHandling, "#11");
            Assert.AreEqual(5, be.ReceiveRetryCount, "#12");
            // hmm, it is documented as 10 minutes but ...
            Assert.AreEqual(TimeSpan.FromMinutes(30), be.RetryCycleDelay, "#13");
            Assert.AreEqual(TimeSpan.FromDays(1), be.TimeToLive, "#15");
            Assert.IsFalse(be.UseMsmqTracing, "#16");
            Assert.IsFalse(be.UseSourceJournal, "#17");
        }
 private bool IsBindingElementsMatch(MsmqTransportBindingElement transport, MessageEncodingBindingElement encoding)
 {
     if (!this.GetTransport().IsMatch(transport))
     {
         return false;
     }
     if (!this.encoding.IsMatch(encoding))
     {
         return false;
     }
     return true;
 }
Пример #34
0
		public void ExportPolicy ()
		{
			MsmqBindingElementBase binding_element = new MsmqTransportBindingElement ();
			binding_element.CustomDeadLetterQueue = new Uri ("msmq://custom");
			binding_element.DeadLetterQueue = DeadLetterQueue.Custom;
			binding_element.Durable = !binding_element.Durable; // Volatile
			binding_element.ExactlyOnce = !binding_element.ExactlyOnce; // BestEffort
			binding_element.ManualAddressing = !binding_element.ManualAddressing;
			binding_element.MaxBufferPoolSize = binding_element.MaxBufferPoolSize / 2;
			binding_element.MaxReceivedMessageSize = binding_element.MaxReceivedMessageSize / 2;
			binding_element.MaxRetryCycles = binding_element.MaxRetryCycles / 2;
			binding_element.ReceiveRetryCount = 10;
			binding_element.ReceiveErrorHandling = ReceiveErrorHandling.Reject;
			binding_element.RetryCycleDelay = TimeSpan.FromSeconds (5);
			binding_element.TimeToLive = TimeSpan.FromSeconds (60);
			binding_element.UseMsmqTracing = !binding_element.UseMsmqTracing;
			binding_element.UseSourceJournal = !binding_element.UseSourceJournal;
			// This ones haven't been implemented yet, so comment them for now.
			//binding_element.ReceiveContextEnabled = !binding_element.ReceiveContextEnabled;
			//binding_element.ValidityDuration = TimeSpan.FromSeconds (30);

			binding_element.MsmqTransportSecurity.MsmqAuthenticationMode = MsmqAuthenticationMode.Certificate;
			binding_element.MsmqTransportSecurity.MsmqEncryptionAlgorithm = MsmqEncryptionAlgorithm.Aes;
			binding_element.MsmqTransportSecurity.MsmqProtectionLevel = ProtectionLevel.EncryptAndSign;
			binding_element.MsmqTransportSecurity.MsmqSecureHashAlgorithm = MsmqSecureHashAlgorithm.Sha256;

			IPolicyExportExtension export_extension = binding_element as IPolicyExportExtension;
			PolicyConversionContext conversion_context = new CustomPolicyConversionContext ();
			export_extension.ExportPolicy (new WsdlExporter (), conversion_context);

			PolicyAssertionCollection binding_assertions = conversion_context.GetBindingAssertions ();
			BindingElementCollection binding_elements = conversion_context.BindingElements;
			Assert.AreEqual (5, binding_assertions.Count, "#A0");
			Assert.AreEqual (0, binding_elements.Count, "#A1");

			// msmq:MsmqVolatile
			XmlNode volatile_node = FindAssertion (binding_assertions, "msmq:MsmqVolatile");
			Assert.AreEqual (true, volatile_node != null, "#B0");
			Assert.AreEqual ("MsmqVolatile", volatile_node.LocalName, "#B1");
			Assert.AreEqual ("http://schemas.microsoft.com/ws/06/2004/mspolicy/msmq", volatile_node.NamespaceURI, "#B2");
			Assert.AreEqual (String.Empty, volatile_node.InnerText, "#B3");
			Assert.AreEqual (0, volatile_node.Attributes.Count, "#B4");
			Assert.AreEqual (0, volatile_node.ChildNodes.Count, "#B5");

			// msmq:MsmqBestEffort
			XmlNode best_effort_node = FindAssertion (binding_assertions, "msmq:MsmqBestEffort");
			Assert.AreEqual (true, best_effort_node != null, "#C0");
			Assert.AreEqual ("MsmqBestEffort", best_effort_node.LocalName, "#C1");
			Assert.AreEqual ("http://schemas.microsoft.com/ws/06/2004/mspolicy/msmq", best_effort_node.NamespaceURI, "#C2");
			Assert.AreEqual (String.Empty, best_effort_node.InnerText, "#C3");
			Assert.AreEqual (0, best_effort_node.Attributes.Count, "#C4");
			Assert.AreEqual (0, best_effort_node.ChildNodes.Count, "#C5");

			// Setting MsmqTransportSecurity.MsmqAuthenticationMode to a value other than WindowsDomain
			// causes the removal of the WindowsDomain policy.
			XmlNode domain_node = FindAssertion (binding_assertions, "msmq:WindowsDomain");
			Assert.AreEqual (true, domain_node == null, "#D0");
		}
Пример #35
0
        internal static bool TryCreate(BindingElementCollection elements, out Binding binding)
        {
            binding = null;
            if (elements.Count > 3)
            {
                return(false);
            }

            SecurityBindingElement security = null;
            BinaryMessageEncodingBindingElement encoding  = null;
            MsmqTransportBindingElement         transport = null;

            foreach (BindingElement element in elements)
            {
                if (element is SecurityBindingElement)
                {
                    security = element as SecurityBindingElement;
                }
                else if (element is TransportBindingElement)
                {
                    transport = element as MsmqTransportBindingElement;
                }
                else if (element is MessageEncodingBindingElement)
                {
                    encoding = element as BinaryMessageEncodingBindingElement;
                }
                else
                {
                    return(false);
                }
            }

            UnifiedSecurityMode mode;

            if (!IsValidTransport(transport, out mode))
            {
                return(false);
            }

            if (encoding == null)
            {
                return(false);
            }

            NetMsmqSecurity netMsmqSecurity;

            if (!TryCreateSecurity(security, mode, out netMsmqSecurity))
            {
                return(false);
            }

            NetMsmqBinding netMsmqBinding = new NetMsmqBinding(netMsmqSecurity);

            netMsmqBinding.InitializeFrom(transport, encoding);
            if (!netMsmqBinding.IsBindingElementsMatch(transport, encoding))
            {
                return(false);
            }

            binding = netMsmqBinding;
            return(true);
        }
Пример #36
0
		public override BindingElementCollection CreateBindingElements ()
		{
			BinaryMessageEncodingBindingElement be =
				new BinaryMessageEncodingBindingElement ();
			quotas.CopyTo (be.ReaderQuotas);
			MsmqTransportBindingElement te =
				new MsmqTransportBindingElement ();
			te.MaxPoolSize = (int) MaxBufferPoolSize;
			te.QueueTransferProtocol = QueueTransferProtocol;
			te.UseActiveDirectory = UseActiveDirectory;
			te.CustomDeadLetterQueue = CustomDeadLetterQueue;
			te.DeadLetterQueue = DeadLetterQueue;
			te.Durable = Durable;
			te.ExactlyOnce = ExactlyOnce;
			te.MaxReceivedMessageSize = MaxReceivedMessageSize;
			te.MaxRetryCycles = MaxRetryCycles;
			te.MsmqTransportSecurity.MsmqAuthenticationMode = Security.Transport.MsmqAuthenticationMode;
			te.MsmqTransportSecurity.MsmqEncryptionAlgorithm = Security.Transport.MsmqEncryptionAlgorithm;
			te.MsmqTransportSecurity.MsmqProtectionLevel = Security.Transport.MsmqProtectionLevel;
			te.MsmqTransportSecurity.MsmqSecureHashAlgorithm = Security.Transport.MsmqSecureHashAlgorithm;
			te.ReceiveErrorHandling = ReceiveErrorHandling;
			te.ReceiveRetryCount = ReceiveRetryCount;
			te.RetryCycleDelay = RetryCycleDelay;
			te.TimeToLive = TimeToLive;
			te.UseMsmqTracing = UseMsmqTracing;
			te.UseSourceJournal = UseSourceJournal;

			return new BindingElementCollection (new BindingElement [] { be, te });
		}
Пример #37
0
        private static void ConfigureRouterViaCode(ServiceHost host)
        {
                //configure a MSMQ Binding that is not very tolerant of failures.
                MsmqTransportBindingElement msmqbe = new MsmqTransportBindingElement();

                //Set the auth mode and protection levels to none so that we can run without
                //Active Directory using Private queues.
                msmqbe.MsmqTransportSecurity.MsmqAuthenticationMode = MsmqAuthenticationMode.None;
                msmqbe.MsmqTransportSecurity.MsmqProtectionLevel = System.Net.Security.ProtectionLevel.None;

                //when the Routing Service receives a message and is unable to process it, we should reject it.
                //This will result in the message being placed in the "inbound" queue's System Dead Letter Queue.
                msmqbe.ReceiveErrorHandling = ReceiveErrorHandling.Reject;
                msmqbe.DeadLetterQueue = DeadLetterQueue.System;
                
                //Set the retry count, retry cycles, and delay to very unreasonable values
                //If the message cannot be delivered to the destination Queue on the first try
                //report an error. This error will be noticed by the Routing Service's error
                //handling code, which will automatically move the message to the backup endpoints
                //defined, if available.
                msmqbe.ReceiveRetryCount = 0;
                msmqbe.MaxRetryCycles = 0;
                msmqbe.RetryCycleDelay = TimeSpan.FromMilliseconds(1);
                
                //create the MSMQ Binding with our custom settings
                Binding QueueBinding = new CustomBinding(new BinaryMessageEncodingBindingElement(), msmqbe);

                //add a service endpoint to the host.  This is the endpoint on the Routing Service
                //that reads from the queue.
                host.AddServiceEndpoint(typeof(ISimplexDatagramRouter), QueueBinding, inboundQ);

                //create a new RoutingConfiguration object.
                RoutingConfiguration rc = new RoutingConfiguration();

                //create the service endpoints that the Routing Service will communicate with
                ServiceEndpoint primaryService = new ServiceEndpoint(cd, QueueBinding, new EndpointAddress(primaryServiceQueue));
                ServiceEndpoint backupService = new ServiceEndpoint(cd, QueueBinding, new EndpointAddress(backupServiceQueue));
                ServiceEndpoint primaryLogging = new ServiceEndpoint(cd, QueueBinding, new EndpointAddress(primaryLoggingQueue));
                ServiceEndpoint backupLogging = new ServiceEndpoint(cd, QueueBinding, new EndpointAddress(backupLoggingQueue));

                //we always want the message to go to both a service endpoint and a logging endpoint 
                //the way we achieve this is "multicasting" the message to both destinations at the same time
                //additionally, since we're both the inbound and outbound queues are transactional, if either none of the service queues 
                //or none of the logging queues are able to Transactionally recieve the message, then the Routing Service 
                //will report to the originating system that the message was unable to be delivered, at which point the 
                //originating queue will put the message in it's system Dead Letter Queue.

                //add the primary service queue and the backup service queue endpoint
                rc.FilterTable.Add(new MatchAllMessageFilter(), new List<ServiceEndpoint> { primaryService, backupService });

                //add the primary logging queue and the backup logging queue endpoint
                rc.FilterTable.Add(new MatchAllMessageFilter(), new List<ServiceEndpoint> { primaryLogging, backupLogging });

                //add the RoutingBehavior to the Service
                host.Description.Behaviors.Add(new RoutingBehavior(rc));
        }
Пример #38
0
 void Initialize()
 {
     transport = new MsmqTransportBindingElement();
     encoding = new BinaryMessageEncodingBindingElement();
 }
Пример #39
0
 void Initialize()
 {
     transport = new MsmqTransportBindingElement();
     encoding  = new BinaryMessageEncodingBindingElement();
 }
        static TransportBindingElement CreateTransportBindingElements(string transportUri, PolicyConversionContext policyContext)
        {
            TransportBindingElement transportBindingElement = null;
            // Try and Create TransportBindingElement
            switch (transportUri)
            {
                case TransportPolicyConstants.HttpTransportUri:
                    transportBindingElement = GetHttpTransportBindingElement(policyContext);
                    break;
                case TransportPolicyConstants.TcpTransportUri:
                    transportBindingElement = new TcpTransportBindingElement();
                    break;
                case TransportPolicyConstants.NamedPipeTransportUri:
                    transportBindingElement = new NamedPipeTransportBindingElement();
                    break;
                case TransportPolicyConstants.MsmqTransportUri:
                    transportBindingElement = new MsmqTransportBindingElement();
                    break;
                case TransportPolicyConstants.PeerTransportUri:
#pragma warning disable 0618
                    transportBindingElement = new PeerTransportBindingElement();
#pragma warning restore 0618					
                    break;
                case TransportPolicyConstants.WebSocketTransportUri:
                    HttpTransportBindingElement httpTransport = GetHttpTransportBindingElement(policyContext);
                    httpTransport.WebSocketSettings.TransportUsage = WebSocketTransportUsage.Always;
                    httpTransport.WebSocketSettings.SubProtocol = WebSocketTransportSettings.SoapSubProtocol;
                    transportBindingElement = httpTransport;
                    break;
                default:
                    // There may be another registered converter that can handle this transport.
                    break;
            }

            return transportBindingElement;
        }
Пример #41
0
 void InitializeFrom(MsmqTransportBindingElement transport, BinaryMessageEncodingBindingElement encoding)
 {
     // only set properties that have standard binding manifestations: MaxPoolSize *is not* one of them
     this.CustomDeadLetterQueue = transport.CustomDeadLetterQueue;
     this.DeadLetterQueue = transport.DeadLetterQueue;
     this.Durable = transport.Durable;
     this.ExactlyOnce = transport.ExactlyOnce;
     this.MaxReceivedMessageSize = transport.MaxReceivedMessageSize;
     this.ReceiveRetryCount = transport.ReceiveRetryCount;
     this.MaxRetryCycles = transport.MaxRetryCycles;
     this.ReceiveErrorHandling = transport.ReceiveErrorHandling;
     this.RetryCycleDelay = transport.RetryCycleDelay;
     this.TimeToLive = transport.TimeToLive;
     this.UseSourceJournal = transport.UseSourceJournal;
     this.UseMsmqTracing = transport.UseMsmqTracing;
     this.ReceiveContextEnabled = transport.ReceiveContextEnabled;
     this.QueueTransferProtocol = transport.QueueTransferProtocol;
     this.MaxBufferPoolSize = transport.MaxBufferPoolSize;
     this.UseActiveDirectory = transport.UseActiveDirectory;
     this.ValidityDuration = transport.ValidityDuration;
     this.ReaderQuotas = encoding.ReaderQuotas;
 }
Пример #42
0
        // check that properties of the HttpTransportBindingElement and 
        // MessageEncodingBindingElement not exposed as properties on NetMsmqBinding
        // match default values of the binding elements
        bool IsBindingElementsMatch(MsmqTransportBindingElement transport, MessageEncodingBindingElement encoding)
        {
            // we do not have to check the transport match here: they always match
            if (!this.GetTransport().IsMatch(transport))
                return false;

            if (!this.encoding.IsMatch(encoding))
                return false;
            return true;
        }
		public void CreateChannelInvalidScheme ()
		{
			MsmqTransportBindingElement be =
				new MsmqTransportBindingElement ();
			// Without settings them, it borks when MSMQ setup
			// does not support AD integration.
			be.MsmqTransportSecurity.MsmqAuthenticationMode =
				MsmqAuthenticationMode.None;
			be.MsmqTransportSecurity.MsmqProtectionLevel =
				ProtectionLevel.None;

			BindingContext ctx = new BindingContext (
				new CustomBinding (be),
				empty_params);
			// returns MsmqChannelFactory
			IChannelFactory<IOutputChannel> f =
				ctx.BuildInnerChannelFactory<IOutputChannel> ();
			f.Open ();
			f.CreateChannel (new EndpointAddress ("stream:dummy"));
		}
 private static bool IsValidTransport(MsmqTransportBindingElement msmq, out UnifiedSecurityMode mode)
 {
     mode = 0;
     if (msmq == null)
     {
         return false;
     }
     return NetMsmqSecurity.IsConfiguredTransportSecurity(msmq, out mode);
 }
 private void InitializeFrom(MsmqTransportBindingElement transport, BinaryMessageEncodingBindingElement encoding)
 {
     base.CustomDeadLetterQueue = transport.CustomDeadLetterQueue;
     base.DeadLetterQueue = transport.DeadLetterQueue;
     base.Durable = transport.Durable;
     base.ExactlyOnce = transport.ExactlyOnce;
     base.MaxReceivedMessageSize = transport.MaxReceivedMessageSize;
     base.ReceiveRetryCount = transport.ReceiveRetryCount;
     base.MaxRetryCycles = transport.MaxRetryCycles;
     base.ReceiveErrorHandling = transport.ReceiveErrorHandling;
     base.RetryCycleDelay = transport.RetryCycleDelay;
     base.TimeToLive = transport.TimeToLive;
     base.UseSourceJournal = transport.UseSourceJournal;
     base.UseMsmqTracing = transport.UseMsmqTracing;
     base.ReceiveContextEnabled = transport.ReceiveContextEnabled;
     this.QueueTransferProtocol = transport.QueueTransferProtocol;
     this.MaxBufferPoolSize = transport.MaxBufferPoolSize;
     this.UseActiveDirectory = transport.UseActiveDirectory;
     base.ValidityDuration = transport.ValidityDuration;
     this.ReaderQuotas = encoding.ReaderQuotas;
 }
        public void ExportPolicy()
        {
            MsmqBindingElementBase binding_element = new MsmqTransportBindingElement();

            binding_element.CustomDeadLetterQueue = new Uri("msmq://custom");
            binding_element.DeadLetterQueue       = DeadLetterQueue.Custom;
            binding_element.Durable                = !binding_element.Durable;     // Volatile
            binding_element.ExactlyOnce            = !binding_element.ExactlyOnce; // BestEffort
            binding_element.ManualAddressing       = !binding_element.ManualAddressing;
            binding_element.MaxBufferPoolSize      = binding_element.MaxBufferPoolSize / 2;
            binding_element.MaxReceivedMessageSize = binding_element.MaxReceivedMessageSize / 2;
            binding_element.MaxRetryCycles         = binding_element.MaxRetryCycles / 2;
            binding_element.ReceiveRetryCount      = 10;
            binding_element.ReceiveErrorHandling   = ReceiveErrorHandling.Reject;
            binding_element.RetryCycleDelay        = TimeSpan.FromSeconds(5);
            binding_element.TimeToLive             = TimeSpan.FromSeconds(60);
            binding_element.UseMsmqTracing         = !binding_element.UseMsmqTracing;
            binding_element.UseSourceJournal       = !binding_element.UseSourceJournal;
#if NET_4_0
            // This ones haven't been implemented yet, so comment them for now.
            //binding_element.ReceiveContextEnabled = !binding_element.ReceiveContextEnabled;
            //binding_element.ValidityDuration = TimeSpan.FromSeconds (30);
#endif

            binding_element.MsmqTransportSecurity.MsmqAuthenticationMode  = MsmqAuthenticationMode.Certificate;
            binding_element.MsmqTransportSecurity.MsmqEncryptionAlgorithm = MsmqEncryptionAlgorithm.Aes;
            binding_element.MsmqTransportSecurity.MsmqProtectionLevel     = ProtectionLevel.EncryptAndSign;
            binding_element.MsmqTransportSecurity.MsmqSecureHashAlgorithm = MsmqSecureHashAlgorithm.Sha256;

            IPolicyExportExtension  export_extension   = binding_element as IPolicyExportExtension;
            PolicyConversionContext conversion_context = new CustomPolicyConversionContext();
            export_extension.ExportPolicy(new WsdlExporter(), conversion_context);

            PolicyAssertionCollection binding_assertions = conversion_context.GetBindingAssertions();
            BindingElementCollection  binding_elements   = conversion_context.BindingElements;
            Assert.AreEqual(5, binding_assertions.Count, "#A0");
            Assert.AreEqual(0, binding_elements.Count, "#A1");

            // msmq:MsmqVolatile
            XmlNode volatile_node = FindAssertion(binding_assertions, "msmq:MsmqVolatile");
            Assert.AreEqual(true, volatile_node != null, "#B0");
            Assert.AreEqual("MsmqVolatile", volatile_node.LocalName, "#B1");
            Assert.AreEqual("http://schemas.microsoft.com/ws/06/2004/mspolicy/msmq", volatile_node.NamespaceURI, "#B2");
            Assert.AreEqual(String.Empty, volatile_node.InnerText, "#B3");
            Assert.AreEqual(0, volatile_node.Attributes.Count, "#B4");
            Assert.AreEqual(0, volatile_node.ChildNodes.Count, "#B5");

            // msmq:MsmqBestEffort
            XmlNode best_effort_node = FindAssertion(binding_assertions, "msmq:MsmqBestEffort");
            Assert.AreEqual(true, best_effort_node != null, "#C0");
            Assert.AreEqual("MsmqBestEffort", best_effort_node.LocalName, "#C1");
            Assert.AreEqual("http://schemas.microsoft.com/ws/06/2004/mspolicy/msmq", best_effort_node.NamespaceURI, "#C2");
            Assert.AreEqual(String.Empty, best_effort_node.InnerText, "#C3");
            Assert.AreEqual(0, best_effort_node.Attributes.Count, "#C4");
            Assert.AreEqual(0, best_effort_node.ChildNodes.Count, "#C5");

            // Setting MsmqTransportSecurity.MsmqAuthenticationMode to a value other than WindowsDomain
            // causes the removal of the WindowsDomain policy.
            XmlNode domain_node = FindAssertion(binding_assertions, "msmq:WindowsDomain");
            Assert.AreEqual(true, domain_node == null, "#D0");
        }
Пример #47
0
        static void FillBindingInfo(BindingElement bindingElement, ref IWmiInstance instance)
        {
            Fx.Assert(null != bindingElement, "");
            Fx.Assert(null != instance, "");

            if (bindingElement is IWmiInstanceProvider)
            {
                IWmiInstanceProvider instanceProvider = (IWmiInstanceProvider)bindingElement;
                instance = instance.NewInstance(instanceProvider.GetInstanceType());
                instanceProvider.FillInstance(instance);
                return;
            }

            Type elementType = AdministrationHelpers.GetServiceModelBaseType(bindingElement.GetType());

            if (null != elementType)
            {
                instance = instance.NewInstance(elementType.Name);
                if (bindingElement is TransportBindingElement)
                {
                    TransportBindingElement transport = (TransportBindingElement)bindingElement;
                    instance.SetProperty(AdministrationStrings.ManualAddressing, transport.ManualAddressing);
                    instance.SetProperty(AdministrationStrings.MaxReceivedMessageSize, transport.MaxReceivedMessageSize);
                    instance.SetProperty(AdministrationStrings.MaxBufferPoolSize, transport.MaxBufferPoolSize);
                    instance.SetProperty(AdministrationStrings.Scheme, transport.Scheme);

                    if (bindingElement is ConnectionOrientedTransportBindingElement)
                    {
                        ConnectionOrientedTransportBindingElement connectionOriented = (ConnectionOrientedTransportBindingElement)bindingElement;
                        instance.SetProperty(AdministrationStrings.ConnectionBufferSize, connectionOriented.ConnectionBufferSize);
                        instance.SetProperty(AdministrationStrings.HostNameComparisonMode, connectionOriented.HostNameComparisonMode.ToString());
                        instance.SetProperty(AdministrationStrings.ChannelInitializationTimeout, connectionOriented.ChannelInitializationTimeout);
                        instance.SetProperty(AdministrationStrings.MaxBufferSize, connectionOriented.MaxBufferSize);
                        instance.SetProperty(AdministrationStrings.MaxPendingConnections, connectionOriented.MaxPendingConnections);
                        instance.SetProperty(AdministrationStrings.MaxOutputDelay, connectionOriented.MaxOutputDelay);
                        instance.SetProperty(AdministrationStrings.MaxPendingAccepts, connectionOriented.MaxPendingAccepts);
                        instance.SetProperty(AdministrationStrings.TransferMode, connectionOriented.TransferMode.ToString());

                        if (bindingElement is TcpTransportBindingElement)
                        {
                            TcpTransportBindingElement tcp = (TcpTransportBindingElement)bindingElement;
                            instance.SetProperty(AdministrationStrings.ListenBacklog, tcp.ListenBacklog);
                            instance.SetProperty(AdministrationStrings.PortSharingEnabled, tcp.PortSharingEnabled);
                            instance.SetProperty(AdministrationStrings.TeredoEnabled, tcp.TeredoEnabled);

                            IWmiInstance connectionPool = instance.NewInstance(AdministrationStrings.TcpConnectionPoolSettings);
                            connectionPool.SetProperty(AdministrationStrings.GroupName, tcp.ConnectionPoolSettings.GroupName);
                            connectionPool.SetProperty(AdministrationStrings.IdleTimeout, tcp.ConnectionPoolSettings.IdleTimeout);
                            connectionPool.SetProperty(AdministrationStrings.LeaseTimeout, tcp.ConnectionPoolSettings.LeaseTimeout);
                            connectionPool.SetProperty(AdministrationStrings.MaxOutboundConnectionsPerEndpoint, tcp.ConnectionPoolSettings.MaxOutboundConnectionsPerEndpoint);

                            instance.SetProperty(AdministrationStrings.ConnectionPoolSettings, connectionPool);

                            FillExtendedProtectionPolicy(instance, tcp.ExtendedProtectionPolicy);
                        }
                        else if (bindingElement is NamedPipeTransportBindingElement)
                        {
                            NamedPipeTransportBindingElement namedPipe = (NamedPipeTransportBindingElement)bindingElement;
                            IWmiInstance connectionPool = instance.NewInstance(AdministrationStrings.NamedPipeConnectionPoolSettings);

                            connectionPool.SetProperty(AdministrationStrings.GroupName, namedPipe.ConnectionPoolSettings.GroupName);
                            connectionPool.SetProperty(AdministrationStrings.IdleTimeout, namedPipe.ConnectionPoolSettings.IdleTimeout);
                            connectionPool.SetProperty(AdministrationStrings.MaxOutboundConnectionsPerEndpoint, namedPipe.ConnectionPoolSettings.MaxOutboundConnectionsPerEndpoint);

                            instance.SetProperty(AdministrationStrings.ConnectionPoolSettings, connectionPool);
                        }
                    }
                    else if (bindingElement is HttpTransportBindingElement)
                    {
                        HttpTransportBindingElement http = (HttpTransportBindingElement)bindingElement;
                        instance.SetProperty(AdministrationStrings.AllowCookies, http.AllowCookies);
                        instance.SetProperty(AdministrationStrings.AuthenticationScheme, http.AuthenticationScheme.ToString());

                        instance.SetProperty(AdministrationStrings.BypassProxyOnLocal, http.BypassProxyOnLocal);
                        instance.SetProperty(AdministrationStrings.DecompressionEnabled, http.DecompressionEnabled);
                        instance.SetProperty(AdministrationStrings.HostNameComparisonMode, http.HostNameComparisonMode.ToString());
                        instance.SetProperty(AdministrationStrings.KeepAliveEnabled, http.KeepAliveEnabled);
                        instance.SetProperty(AdministrationStrings.MaxBufferSize, http.MaxBufferSize);
                        if (null != http.ProxyAddress)
                        {
                            instance.SetProperty(AdministrationStrings.ProxyAddress, http.ProxyAddress.AbsoluteUri.ToString());
                        }
                        instance.SetProperty(AdministrationStrings.ProxyAuthenticationScheme, http.ProxyAuthenticationScheme.ToString());
                        instance.SetProperty(AdministrationStrings.Realm, http.Realm);
                        instance.SetProperty(AdministrationStrings.TransferMode, http.TransferMode.ToString());
                        instance.SetProperty(AdministrationStrings.UnsafeConnectionNtlmAuthentication, http.UnsafeConnectionNtlmAuthentication);
                        instance.SetProperty(AdministrationStrings.UseDefaultWebProxy, http.UseDefaultWebProxy);

                        FillExtendedProtectionPolicy(instance, http.ExtendedProtectionPolicy);

                        if (bindingElement is HttpsTransportBindingElement)
                        {
                            HttpsTransportBindingElement https = (HttpsTransportBindingElement)bindingElement;
                            instance.SetProperty(AdministrationStrings.RequireClientCertificate, https.RequireClientCertificate);
                        }
                    }
                    else if (bindingElement is MsmqBindingElementBase)
                    {
                        MsmqBindingElementBase msmq = (MsmqBindingElementBase)bindingElement;

                        if (null != msmq.CustomDeadLetterQueue)
                        {
                            instance.SetProperty(AdministrationStrings.CustomDeadLetterQueue, msmq.CustomDeadLetterQueue.AbsoluteUri.ToString());
                        }
                        instance.SetProperty(AdministrationStrings.DeadLetterQueue, msmq.DeadLetterQueue);
                        instance.SetProperty(AdministrationStrings.Durable, msmq.Durable);
                        instance.SetProperty(AdministrationStrings.ExactlyOnce, msmq.ExactlyOnce);
                        instance.SetProperty(AdministrationStrings.MaxRetryCycles, msmq.MaxRetryCycles);
                        instance.SetProperty(AdministrationStrings.ReceiveContextEnabled, msmq.ReceiveContextEnabled);
                        instance.SetProperty(AdministrationStrings.ReceiveErrorHandling, msmq.ReceiveErrorHandling);
                        instance.SetProperty(AdministrationStrings.ReceiveRetryCount, msmq.ReceiveRetryCount);
                        instance.SetProperty(AdministrationStrings.RetryCycleDelay, msmq.RetryCycleDelay);
                        instance.SetProperty(AdministrationStrings.TimeToLive, msmq.TimeToLive);
                        instance.SetProperty(AdministrationStrings.UseSourceJournal, msmq.UseSourceJournal);
                        instance.SetProperty(AdministrationStrings.UseMsmqTracing, msmq.UseMsmqTracing);
                        instance.SetProperty(AdministrationStrings.ValidityDuration, msmq.ValidityDuration);

                        MsmqTransportBindingElement msmqTransport = msmq as MsmqTransportBindingElement;
                        if (null != msmqTransport)
                        {
                            instance.SetProperty(AdministrationStrings.MaxPoolSize, msmqTransport.MaxPoolSize);
                            instance.SetProperty(AdministrationStrings.QueueTransferProtocol, msmqTransport.QueueTransferProtocol);
                            instance.SetProperty(AdministrationStrings.UseActiveDirectory, msmqTransport.UseActiveDirectory);
                        }

                        MsmqIntegrationBindingElement msmqIntegration = msmq as MsmqIntegrationBindingElement;
                        if (null != msmqIntegration)
                        {
                            instance.SetProperty(AdministrationStrings.SerializationFormat, msmqIntegration.SerializationFormat.ToString());
                        }
                    }
#pragma warning disable 0618
                    else if (bindingElement is PeerTransportBindingElement)
                    {
                        PeerTransportBindingElement peer = (PeerTransportBindingElement)bindingElement;
                        instance.SetProperty(AdministrationStrings.ListenIPAddress, peer.ListenIPAddress);
                        instance.SetProperty(AdministrationStrings.Port, peer.Port);

                        IWmiInstance securitySettings = instance.NewInstance(AdministrationStrings.PeerSecuritySettings);
                        securitySettings.SetProperty(AdministrationStrings.PeerSecurityMode, peer.Security.Mode.ToString());
                        IWmiInstance transportSecuritySettings = securitySettings.NewInstance(AdministrationStrings.PeerTransportSecuritySettings);
                        transportSecuritySettings.SetProperty(AdministrationStrings.PeerTransportCredentialType, peer.Security.Transport.CredentialType.ToString());
                        securitySettings.SetProperty(AdministrationStrings.Transport, transportSecuritySettings);
                        instance.SetProperty(AdministrationStrings.Security, securitySettings);
                    }
                }
                else if (bindingElement is PeerResolverBindingElement)
                {
                    PeerResolverBindingElement baseResolver = (PeerResolverBindingElement)bindingElement;
                    instance.SetProperty(AdministrationStrings.ReferralPolicy, baseResolver.ReferralPolicy.ToString());
                    if (bindingElement is PeerCustomResolverBindingElement)
                    {
                        PeerCustomResolverBindingElement specificElement = (PeerCustomResolverBindingElement)bindingElement;
                        if (specificElement.Address != null)
                        {
                            instance.SetProperty(AdministrationStrings.Address, specificElement.Address.ToString());
                        }
                        if (specificElement.Binding != null)
                        {
                            instance.SetProperty(AdministrationStrings.Binding, specificElement.Binding.ToString());
                        }
                    }
                }
#pragma warning restore 0618
                else if (bindingElement is ReliableSessionBindingElement)
                {
                    ReliableSessionBindingElement specificElement = (ReliableSessionBindingElement)bindingElement;
                    instance.SetProperty(AdministrationStrings.AcknowledgementInterval, specificElement.AcknowledgementInterval);
                    instance.SetProperty(AdministrationStrings.FlowControlEnabled, specificElement.FlowControlEnabled);
                    instance.SetProperty(AdministrationStrings.InactivityTimeout, specificElement.InactivityTimeout);
                    instance.SetProperty(AdministrationStrings.MaxPendingChannels, specificElement.MaxPendingChannels);
                    instance.SetProperty(AdministrationStrings.MaxRetryCount, specificElement.MaxRetryCount);
                    instance.SetProperty(AdministrationStrings.MaxTransferWindowSize, specificElement.MaxTransferWindowSize);
                    instance.SetProperty(AdministrationStrings.Ordered, specificElement.Ordered);
                    instance.SetProperty(AdministrationStrings.ReliableMessagingVersion, specificElement.ReliableMessagingVersion.ToString());
                }
                else if (bindingElement is SecurityBindingElement)
                {
                    SecurityBindingElement specificElement = (SecurityBindingElement)bindingElement;
                    instance.SetProperty(AdministrationStrings.AllowInsecureTransport, specificElement.AllowInsecureTransport);
                    instance.SetProperty(AdministrationStrings.DefaultAlgorithmSuite, specificElement.DefaultAlgorithmSuite.ToString());
                    instance.SetProperty(AdministrationStrings.EnableUnsecuredResponse, specificElement.EnableUnsecuredResponse);
                    instance.SetProperty(AdministrationStrings.IncludeTimestamp, specificElement.IncludeTimestamp);
                    instance.SetProperty(AdministrationStrings.KeyEntropyMode, specificElement.KeyEntropyMode.ToString());
                    instance.SetProperty(AdministrationStrings.SecurityHeaderLayout, specificElement.SecurityHeaderLayout.ToString());
                    instance.SetProperty(AdministrationStrings.MessageSecurityVersion, specificElement.MessageSecurityVersion.ToString());

                    IWmiInstance localServiceSecuritySettings = instance.NewInstance(AdministrationStrings.LocalServiceSecuritySettings);
                    localServiceSecuritySettings.SetProperty(AdministrationStrings.DetectReplays, specificElement.LocalServiceSettings.DetectReplays);
                    localServiceSecuritySettings.SetProperty(AdministrationStrings.InactivityTimeout, specificElement.LocalServiceSettings.InactivityTimeout);
                    localServiceSecuritySettings.SetProperty(AdministrationStrings.IssuedCookieLifetime, specificElement.LocalServiceSettings.IssuedCookieLifetime);
                    localServiceSecuritySettings.SetProperty(AdministrationStrings.MaxCachedCookies, specificElement.LocalServiceSettings.MaxCachedCookies);
                    localServiceSecuritySettings.SetProperty(AdministrationStrings.MaxClockSkew, specificElement.LocalServiceSettings.MaxClockSkew);
                    localServiceSecuritySettings.SetProperty(AdministrationStrings.MaxPendingSessions, specificElement.LocalServiceSettings.MaxPendingSessions);
                    localServiceSecuritySettings.SetProperty(AdministrationStrings.MaxStatefulNegotiations, specificElement.LocalServiceSettings.MaxStatefulNegotiations);
                    localServiceSecuritySettings.SetProperty(AdministrationStrings.NegotiationTimeout, specificElement.LocalServiceSettings.NegotiationTimeout);
                    localServiceSecuritySettings.SetProperty(AdministrationStrings.ReconnectTransportOnFailure, specificElement.LocalServiceSettings.ReconnectTransportOnFailure);
                    localServiceSecuritySettings.SetProperty(AdministrationStrings.ReplayCacheSize, specificElement.LocalServiceSettings.ReplayCacheSize);
                    localServiceSecuritySettings.SetProperty(AdministrationStrings.ReplayWindow, specificElement.LocalServiceSettings.ReplayWindow);
                    localServiceSecuritySettings.SetProperty(AdministrationStrings.SessionKeyRenewalInterval, specificElement.LocalServiceSettings.SessionKeyRenewalInterval);
                    localServiceSecuritySettings.SetProperty(AdministrationStrings.SessionKeyRolloverInterval, specificElement.LocalServiceSettings.SessionKeyRolloverInterval);
                    localServiceSecuritySettings.SetProperty(AdministrationStrings.TimestampValidityDuration, specificElement.LocalServiceSettings.TimestampValidityDuration);
                    instance.SetProperty(AdministrationStrings.LocalServiceSecuritySettings, localServiceSecuritySettings);

                    if (bindingElement is AsymmetricSecurityBindingElement)
                    {
                        AsymmetricSecurityBindingElement specificElement1 = (AsymmetricSecurityBindingElement)bindingElement;

                        instance.SetProperty(AdministrationStrings.MessageProtectionOrder, specificElement1.MessageProtectionOrder.ToString());
                        instance.SetProperty(AdministrationStrings.RequireSignatureConfirmation, specificElement1.RequireSignatureConfirmation);
                    }
                    else if (bindingElement is SymmetricSecurityBindingElement)
                    {
                        SymmetricSecurityBindingElement specificElement1 = (SymmetricSecurityBindingElement)bindingElement;

                        instance.SetProperty(AdministrationStrings.MessageProtectionOrder, specificElement1.MessageProtectionOrder.ToString());
                        instance.SetProperty(AdministrationStrings.RequireSignatureConfirmation, specificElement1.RequireSignatureConfirmation);
                    }
                }
                else if (bindingElement is WindowsStreamSecurityBindingElement)
                {
                    WindowsStreamSecurityBindingElement specificElement
                        = (WindowsStreamSecurityBindingElement)bindingElement;
                    instance.SetProperty(AdministrationStrings.ProtectionLevel, specificElement.ProtectionLevel.ToString());
                }
                else if (bindingElement is SslStreamSecurityBindingElement)
                {
                    SslStreamSecurityBindingElement specificElement = (SslStreamSecurityBindingElement)bindingElement;
                    instance.SetProperty(AdministrationStrings.RequireClientCertificate, specificElement.RequireClientCertificate);
                }
                else if (bindingElement is CompositeDuplexBindingElement)
                {
                    CompositeDuplexBindingElement specificElement = (CompositeDuplexBindingElement)bindingElement;
                    if (specificElement.ClientBaseAddress != null)
                    {
                        instance.SetProperty(AdministrationStrings.ClientBaseAddress, specificElement.ClientBaseAddress.AbsoluteUri);
                    }
                }
                else if (bindingElement is OneWayBindingElement)
                {
                    OneWayBindingElement oneWay = (OneWayBindingElement)bindingElement;
                    IWmiInstance         channelPoolSettings = instance.NewInstance(AdministrationStrings.ChannelPoolSettings);
                    channelPoolSettings.SetProperty(AdministrationStrings.IdleTimeout, oneWay.ChannelPoolSettings.IdleTimeout);
                    channelPoolSettings.SetProperty(AdministrationStrings.LeaseTimeout, oneWay.ChannelPoolSettings.LeaseTimeout);
                    channelPoolSettings.SetProperty(AdministrationStrings.MaxOutboundChannelsPerEndpoint, oneWay.ChannelPoolSettings.MaxOutboundChannelsPerEndpoint);
                    instance.SetProperty(AdministrationStrings.ChannelPoolSettings, channelPoolSettings);
                    instance.SetProperty(AdministrationStrings.PacketRoutable, oneWay.PacketRoutable);
                    instance.SetProperty(AdministrationStrings.MaxAcceptedChannels, oneWay.MaxAcceptedChannels);
                }
                else if (bindingElement is MessageEncodingBindingElement)
                {
                    MessageEncodingBindingElement encodingElement = (MessageEncodingBindingElement)bindingElement;

                    instance.SetProperty(AdministrationStrings.MessageVersion, encodingElement.MessageVersion.ToString());

                    if (bindingElement is BinaryMessageEncodingBindingElement)
                    {
                        BinaryMessageEncodingBindingElement specificElement = (BinaryMessageEncodingBindingElement)bindingElement;
                        instance.SetProperty(AdministrationStrings.MaxSessionSize, specificElement.MaxSessionSize);
                        instance.SetProperty(AdministrationStrings.MaxReadPoolSize, specificElement.MaxReadPoolSize);
                        instance.SetProperty(AdministrationStrings.MaxWritePoolSize, specificElement.MaxWritePoolSize);
                        if (null != specificElement.ReaderQuotas)
                        {
                            FillReaderQuotas(instance, specificElement.ReaderQuotas);
                        }
                        instance.SetProperty(AdministrationStrings.CompressionFormat, specificElement.CompressionFormat.ToString());
                    }
                    else if (bindingElement is TextMessageEncodingBindingElement)
                    {
                        TextMessageEncodingBindingElement specificElement = (TextMessageEncodingBindingElement)bindingElement;
                        instance.SetProperty(AdministrationStrings.Encoding, specificElement.WriteEncoding.WebName);
                        instance.SetProperty(AdministrationStrings.MaxReadPoolSize, specificElement.MaxReadPoolSize);
                        instance.SetProperty(AdministrationStrings.MaxWritePoolSize, specificElement.MaxWritePoolSize);
                        if (null != specificElement.ReaderQuotas)
                        {
                            FillReaderQuotas(instance, specificElement.ReaderQuotas);
                        }
                    }
                    else if (bindingElement is MtomMessageEncodingBindingElement)
                    {
                        MtomMessageEncodingBindingElement specificElement = (MtomMessageEncodingBindingElement)bindingElement;
                        instance.SetProperty(AdministrationStrings.Encoding, specificElement.WriteEncoding.WebName);
                        instance.SetProperty(AdministrationStrings.MessageVersion, specificElement.MessageVersion.ToString());
                        instance.SetProperty(AdministrationStrings.MaxReadPoolSize, specificElement.MaxReadPoolSize);
                        instance.SetProperty(AdministrationStrings.MaxWritePoolSize, specificElement.MaxWritePoolSize);
                        if (null != specificElement.ReaderQuotas)
                        {
                            FillReaderQuotas(instance, specificElement.ReaderQuotas);
                        }
                    }
                }
                else if (bindingElement is TransactionFlowBindingElement)
                {
                    TransactionFlowBindingElement specificElement = (TransactionFlowBindingElement)bindingElement;
                    instance.SetProperty(AdministrationStrings.TransactionFlow, specificElement.Transactions);
                    instance.SetProperty(AdministrationStrings.TransactionProtocol, specificElement.TransactionProtocol.ToString());
                    instance.SetProperty(AdministrationStrings.AllowWildcardAction, specificElement.AllowWildcardAction);
                }
                else if (bindingElement is PrivacyNoticeBindingElement)
                {
                    PrivacyNoticeBindingElement specificElement = (PrivacyNoticeBindingElement)bindingElement;
                    instance.SetProperty(AdministrationStrings.Url, specificElement.Url.ToString());
                    instance.SetProperty(AdministrationStrings.PrivacyNoticeVersion, specificElement.Version);
                }
            }
        }