Example #1
0
        CreateBindingElements()
        {
            BindingElement         tx     = new TransactionFlowBindingElement(TransactionProtocol.WSAtomicTransactionOctober2004);
            SecurityBindingElement sec    = CreateMessageSecurity();
            BindingElement         msg    = null;
            MessageVersion         msgver = MessageVersion.CreateVersion(EnvelopeVersion, AddressingVersion.WSAddressing10);

            switch (MessageEncoding)
            {
            case WSMessageEncoding.Mtom:
                msg = new MtomMessageEncodingBindingElement(msgver, TextEncoding);
                break;

            case WSMessageEncoding.Text:
                msg = new TextMessageEncodingBindingElement(msgver, TextEncoding);
                break;

            default:
                throw new NotImplementedException("mhm, another WSMessageEncoding?");
            }
            BindingElement        tr   = GetTransport();
            List <BindingElement> list = new List <BindingElement> ();

            list.Add(tx);
            if (sec != null)
            {
                list.Add(sec);
            }
            list.Add(msg);
            if (tr != null)
            {
                list.Add(tr);
            }
            return(new BindingElementCollection(list.ToArray()));
        }
Example #2
0
        public override BindingElementCollection CreateBindingElements()
        {
            BindingElement         tx  = new TransactionFlowBindingElement(TransactionProtocol.WSAtomicTransactionOctober2004);
            SecurityBindingElement sec = CreateMessageSecurity();
            var msg = new BinaryMessageEncodingBindingElement();

            if (ReaderQuotas != null)
            {
                ReaderQuotas.CopyTo(msg.ReaderQuotas);
            }
            var                   trsec = CreateTransportSecurity();
            BindingElement        tr    = GetTransport();
            List <BindingElement> list  = new List <BindingElement> ();

            if (tx != null)
            {
                list.Add(tx);
            }
            if (sec != null)
            {
                list.Add(sec);
            }
            list.Add(msg);
            if (trsec != null)
            {
                list.Add(trsec);
            }
            list.Add(tr);
            return(new BindingElementCollection(list.ToArray()));
        }
        void EnsureNoOneWayTransactions(ServiceEndpoint endpoint)
        {
            CustomBinding binding = new CustomBinding(endpoint.Binding);
            TransactionFlowBindingElement txFlowBindingElement = binding.Elements.Find <TransactionFlowBindingElement>();

            if (txFlowBindingElement != null)
            {
                for (int i = 0; i < endpoint.Contract.Operations.Count; i++)
                {
                    OperationDescription operation = endpoint.Contract.Operations[i];
                    if (operation.IsOneWay)
                    {
                        TransactionFlowAttribute tfbp = operation.Behaviors.Find <TransactionFlowAttribute>();
                        TransactionFlowOption    transactions;
                        if (tfbp != null)
                        {
                            transactions = tfbp.Transactions;
                        }
                        else
                        {
                            transactions = TransactionFlowOption.NotAllowed;
                        }
                        if (TransactionFlowOptionHelper.AllowedOrRequired(transactions))
                        {
                            throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new InvalidOperationException(
                                                                                          SR.GetString(SR.SFxOneWayAndTransactionsIncompatible, endpoint.Contract.Name, operation.Name)));
                        }
                    }
                }
            }
        }
		//[Ignore ("Mono never supports OleTx, thus it won't work forever.")]
		public void DefaultValues ()
		{
			TransactionFlowBindingElement be =
				new TransactionFlowBindingElement ();
			Assert.AreEqual (TransactionProtocol.Default,
					 be.TransactionProtocol, "#1");
		}
        void ValidateTransactionFlowRequired(string resource, string name, ServiceEndpoint endpoint)
        {
            bool anOperationRequiresTxFlow = false;

            for (int i = 0; i < endpoint.Contract.Operations.Count; i++)
            {
                OperationDescription     operationDescription = endpoint.Contract.Operations[i];
                TransactionFlowAttribute transactionFlow      = operationDescription.Behaviors.Find <TransactionFlowAttribute>();
                if (transactionFlow != null && transactionFlow.Transactions == TransactionFlowOption.Mandatory)
                {
                    anOperationRequiresTxFlow = true;
                    break;
                }
            }

            if (anOperationRequiresTxFlow)
            {
                CustomBinding binding = new CustomBinding(endpoint.Binding);
                TransactionFlowBindingElement transactionFlowBindingElement =
                    binding.Elements.Find <TransactionFlowBindingElement>();

                if (transactionFlowBindingElement == null || !transactionFlowBindingElement.Transactions)
                {
                    throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new InvalidOperationException(
                                                                                  String.Format(Globalization.CultureInfo.CurrentCulture, SR.GetString(resource), name, binding.Name)));
                }
            }
        }
        protected internal override void InitializeFrom(BindingElement bindingElement)
        {
            base.InitializeFrom(bindingElement);
            TransactionFlowBindingElement binding = (TransactionFlowBindingElement)bindingElement;

            SetPropertyValueIfNotDefaultValue(ConfigurationStrings.TransactionProtocol, binding.TransactionProtocol);
        }
        protected internal override void InitializeFrom(BindingElement bindingElement)
        {
            base.InitializeFrom(bindingElement);
            TransactionFlowBindingElement element = (TransactionFlowBindingElement)bindingElement;

            this.TransactionProtocol = element.TransactionProtocol;
        }
Example #8
0
        static TransactionFlowBindingElement GetDefaultTransactionFlowBindingElement()
        {
            TransactionFlowBindingElement tfbe = new TransactionFlowBindingElement(false);

            tfbe.TransactionProtocol = TransactionProtocol.WSAtomicTransactionOctober2004;
            return(tfbe);
        }
Example #9
0
        public static CustomBinding CreateBinding(bool portSharingEnabled, int maxReceivedMessageSize, long maxBufferPoolSize, bool useSslStreamSecurity, bool clientCertificateAuthEnabled, DnsEndpointIdentity endpointIdentity, IssuedSecurityTokenParameters issuedTokenParameters)
        {
            TransactionFlowBindingElement       transactionFlowBindingElement       = new TransactionFlowBindingElement();
            BinaryMessageEncodingBindingElement binaryMessageEncodingBindingElement = new BinaryMessageEncodingBindingElement();

            binaryMessageEncodingBindingElement.ReaderQuotas.MaxStringContentLength = maxReceivedMessageSize;
            TcpTransportBindingElement tcpTransportBindingElement = new TcpTransportBindingElement()
            {
                PortSharingEnabled     = portSharingEnabled,
                MaxReceivedMessageSize = (long)maxReceivedMessageSize,
                MaxBufferPoolSize      = maxBufferPoolSize
            };
            CustomBinding customBinding = new CustomBinding();

            customBinding.Elements.Add(transactionFlowBindingElement);
            if (useSslStreamSecurity)
            {
                SslStreamSecurityBindingElement sslStreamSecurityBindingElement = new SslStreamSecurityBindingElement();
                if (endpointIdentity != null)
                {
                    sslStreamSecurityBindingElement.IdentityVerifier = new LenientDnsIdentityVerifier(endpointIdentity);
                }
                sslStreamSecurityBindingElement.RequireClientCertificate = clientCertificateAuthEnabled;
                customBinding.Elements.Add(sslStreamSecurityBindingElement);
            }
            customBinding.Elements.Add(binaryMessageEncodingBindingElement);
            customBinding.Elements.Add(tcpTransportBindingElement);
            return(customBinding);
        }
 NetTcpBinding(TcpTransportBindingElement transport, BinaryMessageEncodingBindingElement encoding, TransactionFlowBindingElement context, ReliableSessionBindingElement session, NetTcpSecurity security)
     : this()
 {
     this.security = security;
     this.ReliableSession.Enabled = session != null;
     InitializeFrom(transport, encoding, context, session);
 }
 internal static bool TryCreate(SecurityBindingElement sbe, TransportBindingElement transport, PrivacyNoticeBindingElement privacy, ReliableSessionBindingElement rsbe, TransactionFlowBindingElement tfbe, out Binding binding)
 {
     WSFederationHttpSecurityMode mode;
     WSFederationHttpSecurity security2;
     bool isReliableSession = rsbe != null;
     binding = null;
     HttpTransportSecurity transportSecurity = new HttpTransportSecurity();
     if (!WSFederationHttpBinding.GetSecurityModeFromTransport(transport, transportSecurity, out mode))
     {
         return false;
     }
     HttpsTransportBindingElement element = transport as HttpsTransportBindingElement;
     if (((element != null) && (element.MessageSecurityVersion != null)) && (element.MessageSecurityVersion.SecurityPolicyVersion != WS2007MessageSecurityVersion.SecurityPolicyVersion))
     {
         return false;
     }
     if (TryCreateSecurity(sbe, mode, transportSecurity, isReliableSession, out security2))
     {
         binding = new WS2007FederationHttpBinding(security2, privacy, isReliableSession);
     }
     if ((rsbe != null) && (rsbe.ReliableMessagingVersion != ReliableMessagingVersion.WSReliableMessaging11))
     {
         return false;
     }
     if ((tfbe != null) && (tfbe.TransactionProtocol != TransactionProtocol.WSAtomicTransaction11))
     {
         return false;
     }
     return (binding != null);
 }
 private void Initialize()
 {
     this.transport       = new TcpTransportBindingElement();
     this.encoding        = new BinaryMessageEncodingBindingElement();
     this.context         = GetDefaultTransactionFlowBindingElement();
     this.session         = new ReliableSessionBindingElement();
     this.reliableSession = new OptionalReliableSession(this.session);
 }
        //[Ignore ("Mono never supports OleTx, thus it won't work forever.")]
        public void DefaultValues()
        {
            TransactionFlowBindingElement be =
                new TransactionFlowBindingElement();

            Assert.AreEqual(TransactionProtocol.Default,
                            be.TransactionProtocol, "#1");
        }
        public override void ApplyConfiguration(BindingElement bindingElement)
        {
            base.ApplyConfiguration(bindingElement);
            TransactionFlowBindingElement element = (TransactionFlowBindingElement)bindingElement;

            element.Transactions        = true;
            element.TransactionProtocol = this.TransactionProtocol;
            element.AllowWildcardAction = this.AllowWildcardAction;
        }
		public void CanBuildChannelListener ()
		{
			TransactionFlowBindingElement be =
				new TransactionFlowBindingElement ();
			BindingContext ctx = new BindingContext (
				new CustomBinding (),
				new BindingParameterCollection ());
			Assert.IsTrue (be.CanBuildChannelListener<IReplyChannel> (ctx), "#1");
			Assert.IsTrue (be.CanBuildChannelListener<IInputChannel> (ctx), "#2");
			Assert.IsTrue (be.CanBuildChannelListener<IRequestSessionChannel> (ctx), "#3");
			Assert.IsTrue (be.CanBuildChannelListener<IOutputSessionChannel> (ctx), "#4");
		}
Example #16
0
        private void Initialize()
        {
            _transport       = new TcpTransportBindingElement();
            _encoding        = new BinaryMessageEncodingBindingElement();
            _context         = new TransactionFlowBindingElement(NetTcpDefaults.TransactionsEnabled);
            _session         = new ReliableSessionBindingElement();
            _reliableSession = new OptionalReliableSession(_session);

            // NetNative and CoreCLR initialize to what TransportBindingElement does in the desktop
            // This property is not available in shipped contracts
            _maxBufferPoolSize = TransportDefaults.MaxBufferPoolSize;
        }
 WSDualHttpBinding(
     HttpTransportBindingElement transport,
     MessageEncodingBindingElement encoding,
     TransactionFlowBindingElement txFlow,
     ReliableSessionBindingElement session,
     CompositeDuplexBindingElement compositeDuplex,
     OneWayBindingElement oneWay,
     WSDualHttpSecurity security)
     : this()
 {
     this.security = security;
     InitializeFrom(transport, encoding, txFlow, session, compositeDuplex, oneWay);
 }
 WSDualHttpBinding(
     HttpTransportBindingElement transport,
     MessageEncodingBindingElement encoding,
     TransactionFlowBindingElement txFlow,
     ReliableSessionBindingElement session,
     CompositeDuplexBindingElement compositeDuplex,
     OneWayBindingElement oneWay,
     WSDualHttpSecurity security)
     : this()
 {
     this.security = security;
     InitializeFrom(transport, encoding, txFlow, session, compositeDuplex, oneWay);
 }
 private void InitializeFrom(NamedPipeTransportBindingElement namedPipe, BinaryMessageEncodingBindingElement encoding, TransactionFlowBindingElement context)
 {
     this.Initialize();
     this.HostNameComparisonMode = namedPipe.HostNameComparisonMode;
     this.MaxBufferPoolSize = namedPipe.MaxBufferPoolSize;
     this.MaxBufferSize = namedPipe.MaxBufferSize;
     this.MaxConnections = namedPipe.MaxPendingConnections;
     this.MaxReceivedMessageSize = namedPipe.MaxReceivedMessageSize;
     this.TransferMode = namedPipe.TransferMode;
     this.ReaderQuotas = encoding.ReaderQuotas;
     this.TransactionFlow = context.Transactions;
     this.TransactionProtocol = context.TransactionProtocol;
 }
        public void CanBuildChannelListener()
        {
            TransactionFlowBindingElement be =
                new TransactionFlowBindingElement();
            BindingContext ctx = new BindingContext(
                new CustomBinding(),
                new BindingParameterCollection());

            Assert.IsTrue(be.CanBuildChannelListener <IReplyChannel> (ctx), "#1");
            Assert.IsTrue(be.CanBuildChannelListener <IInputChannel> (ctx), "#2");
            Assert.IsTrue(be.CanBuildChannelListener <IRequestSessionChannel> (ctx), "#3");
            Assert.IsTrue(be.CanBuildChannelListener <IOutputSessionChannel> (ctx), "#4");
        }
Example #21
0
 void Initialize()
 {
     httpTransport               = new HttpTransportBindingElement();
     httpsTransport              = new HttpsTransportBindingElement();
     messageEncoding             = WSHttpBindingDefaults.MessageEncoding;
     txFlow                      = GetDefaultTransactionFlowBindingElement();
     session                     = new ReliableSessionBindingElement(true);
     textEncoding                = new TextMessageEncodingBindingElement();
     textEncoding.MessageVersion = MessageVersion.Soap12WSAddressing10;
     mtomEncoding                = new MtomMessageEncodingBindingElement();
     mtomEncoding.MessageVersion = MessageVersion.Soap12WSAddressing10;
     reliableSession             = new OptionalReliableSession(session);
 }
 void Initialize()
 {
     this.httpTransport               = new HttpTransportBindingElement();
     this.messageEncoding             = WSDualHttpBindingDefaults.MessageEncoding;
     this.txFlow                      = GetDefaultTransactionFlowBindingElement();
     this.session                     = new ReliableSessionBindingElement(true);
     this.textEncoding                = new TextMessageEncodingBindingElement();
     this.textEncoding.MessageVersion = MessageVersion.Soap12WSAddressing10;
     this.mtomEncoding                = new MtomMessageEncodingBindingElement();
     this.mtomEncoding.MessageVersion = MessageVersion.Soap12WSAddressing10;
     this.compositeDuplex             = new CompositeDuplexBindingElement();
     this.reliableSession             = new ReliableSession(session);
     this.oneWay                      = new OneWayBindingElement();
 }
        // This is effectively just a copy of WSHttpBinding.TryCreate(), only it news up the 2007 version
        internal new static bool TryCreate(SecurityBindingElement sbe, TransportBindingElement transport, ReliableSessionBindingElement rsbe, TransactionFlowBindingElement tfbe, out Binding binding)
        {
            bool isReliableSession = (rsbe != null);
            binding = null;

            // reverse GetTransport
            HttpTransportSecurity transportSecurity = WSHttpSecurity.GetDefaultHttpTransportSecurity();
            UnifiedSecurityMode mode;
            if (!WSHttpBinding.GetSecurityModeFromTransport(transport, transportSecurity, out mode))
            {
                return false;
            }

            HttpsTransportBindingElement httpsBinding = transport as HttpsTransportBindingElement;
            if (httpsBinding != null && httpsBinding.MessageSecurityVersion != null)
            {
                if (httpsBinding.MessageSecurityVersion.SecurityPolicyVersion != WS2007MessageSecurityVersion.SecurityPolicyVersion)
                {
                    return false;
                }
            }

            WSHttpSecurity security;
            if (WS2007HttpBinding.TryCreateSecurity(sbe, mode, transportSecurity, isReliableSession, out security))
            {
                WS2007HttpBinding ws2007HttpBinding = new WS2007HttpBinding(security, isReliableSession);

                bool allowCookies;
                if (!WSHttpBinding.TryGetAllowCookiesFromTransport(transport, out allowCookies))
                {
                    return false;
                }

                ws2007HttpBinding.AllowCookies = allowCookies;
                binding = ws2007HttpBinding;
            }

            if (rsbe != null && rsbe.ReliableMessagingVersion != ReliableMessagingVersion.WSReliableMessaging11)
            {
                return false;
            }

            if (tfbe != null && tfbe.TransactionProtocol != TransactionProtocol.WSAtomicTransaction11)
            {
                return false;
            }

            return binding != null;
        }
 private void Initialize()
 {
     lock (this)
     {
         if (!this._isInitialized)
         {
             this._isInitialized   = true;
             this._transport       = new RabbitMQTransportBindingElement();
             this._encoding        = new TextMessageEncodingBindingElement();
             this._compositeDuplex = new CompositeDuplexBindingElement();
             this._transactionFlow = new TransactionFlowBindingElement();
             this.MaxMessageSize   = DefaultMaxMessageSize;
         }
     }
 }
Example #25
0
        void Initialize()
        {
            httpTransport   = new HttpTransportBindingElement();
            httpsTransport  = new HttpsTransportBindingElement();
            transactionFlow = new TransactionFlowBindingElement();
            textEncoding    = new TextMessageEncodingBindingElement();

            // setting up configurable settings' default values
            this.MaxReceivedMessageSize = long.MaxValue;
            this.SecurityMode           = StreamedSecurityMode.Transport;
            this.TransferMode           = StreamedTransferMode.Streamed;

            // setting up non-configurable settings' default values
            this.FlowTransactions = true;
            transactionFlow.TransactionProtocol = TransactionProtocol.WSAtomicTransactionOctober2004;
        }
Example #26
0
            static void ConfigureTransactionFlow(ServiceEndpoint endpoint)
            {
                CustomBinding binding = endpoint.Binding as CustomBinding;

                if (binding == null)
                {
                    binding = new CustomBinding(endpoint.Binding);
                }
                TransactionFlowBindingElement transactionFlow = binding.Elements.Find <TransactionFlowBindingElement>();

                if (transactionFlow != null)
                {
                    transactionFlow.AllowWildcardAction = true;
                    endpoint.Binding = binding;
                }
            }
Example #27
0
 private void Initialize()
 {
     lock (this)
     {
         if (!m_isInitialized)
         {
             m_transport       = new RabbitMQTransportBindingElement();
             m_encoding        = new TextMessageEncodingBindingElement(); // new TextMessageEncodingBindingElement();
             m_session         = new ReliableSessionBindingElement();
             m_compositeDuplex = new CompositeDuplexBindingElement();
             m_transactionFlow = new TransactionFlowBindingElement();
             m_maxMessageSize  = DefaultMaxMessageSize;
             m_isInitialized   = true;
         }
     }
 }
        // check that properties of the HttpTransportBindingElement and
        // MessageEncodingBindingElement not exposed as properties on WsHttpBinding
        // match default values of the binding elements
        bool IsBindingElementsMatch(HttpTransportBindingElement transport,
                                    MessageEncodingBindingElement encoding,
                                    TransactionFlowBindingElement txFlow,
                                    ReliableSessionBindingElement session,
                                    CompositeDuplexBindingElement compositeDuplex,
                                    OneWayBindingElement oneWay)
        {
            if (!this.httpTransport.IsMatch(transport))
            {
                return(false);
            }

            if (this.MessageEncoding == WSMessageEncoding.Text)
            {
                if (!this.textEncoding.IsMatch(encoding))
                {
                    return(false);
                }
            }
            else if (this.MessageEncoding == WSMessageEncoding.Mtom)
            {
                if (!this.mtomEncoding.IsMatch(encoding))
                {
                    return(false);
                }
            }
            if (!this.txFlow.IsMatch(txFlow))
            {
                return(false);
            }
            if (!this.session.IsMatch(session))
            {
                return(false);
            }
            if (!this.compositeDuplex.IsMatch(compositeDuplex))
            {
                return(false);
            }

            if (!this.oneWay.IsMatch(oneWay))
            {
                return(false);
            }

            return(true);
        }
Example #29
0
 public QpidBinding(string host, int port, string username, string password, string virtualhost)
 {
     Host = host;
     PortNumber = port;
     UserName = username;
     Password = password;
     VirtualHost = virtualhost;
     _transport = new QpidTransportBindingElement();
     _transport.Host = host;
     _transport.PortNumber = port;
     _transport.Password = password;
     _transport.UserName = username;
     _transport.VirtualHost = virtualhost;
     _encoding = new TextMessageEncodingBindingElement();
     _session = new ReliableSessionBindingElement();
     _compositeDuplex = new CompositeDuplexBindingElement();
     _transactionFlow = new TransactionFlowBindingElement();
 }       
Example #30
0
 public QpidBinding(string host, int port, string username, string password, string virtualhost)
 {
     Host                   = host;
     PortNumber             = port;
     UserName               = username;
     Password               = password;
     VirtualHost            = virtualhost;
     _transport             = new QpidTransportBindingElement();
     _transport.Host        = host;
     _transport.PortNumber  = port;
     _transport.Password    = password;
     _transport.UserName    = username;
     _transport.VirtualHost = virtualhost;
     _encoding              = new TextMessageEncodingBindingElement();
     _session               = new ReliableSessionBindingElement();
     _compositeDuplex       = new CompositeDuplexBindingElement();
     _transactionFlow       = new TransactionFlowBindingElement();
 }
        void InitializeFrom(
            HttpTransportBindingElement transport,
            MessageEncodingBindingElement encoding,
            TransactionFlowBindingElement txFlow,
            ReliableSessionBindingElement session,
            CompositeDuplexBindingElement compositeDuplex,
            OneWayBindingElement oneWay)
        {
            // transport
            this.BypassProxyOnLocal     = transport.BypassProxyOnLocal;
            this.HostNameComparisonMode = transport.HostNameComparisonMode;
            this.MaxBufferPoolSize      = transport.MaxBufferPoolSize;
            this.MaxReceivedMessageSize = transport.MaxReceivedMessageSize;
            this.ProxyAddress           = transport.ProxyAddress;
            this.UseDefaultWebProxy     = transport.UseDefaultWebProxy;

            // this binding only supports Text and Mtom encoding
            if (encoding is TextMessageEncodingBindingElement)
            {
                this.MessageEncoding = WSMessageEncoding.Text;
                TextMessageEncodingBindingElement text = (TextMessageEncodingBindingElement)encoding;
                this.TextEncoding = text.WriteEncoding;
                this.ReaderQuotas = text.ReaderQuotas;
            }
            else if (encoding is MtomMessageEncodingBindingElement)
            {
                messageEncoding = WSMessageEncoding.Mtom;
                MtomMessageEncodingBindingElement mtom = (MtomMessageEncodingBindingElement)encoding;
                this.TextEncoding = mtom.WriteEncoding;
                this.ReaderQuotas = mtom.ReaderQuotas;
            }
            this.TransactionFlow   = txFlow.Transactions;
            this.ClientBaseAddress = compositeDuplex.ClientBaseAddress;

            //session
            if (session != null)
            {
                // only set properties that have standard binding manifestations
                this.session.InactivityTimeout = session.InactivityTimeout;
                this.session.Ordered           = session.Ordered;
            }
        }
Example #32
0
        public void DefaultTransactionFlow()
        {
            WSHttpBinding b = new WSHttpBinding();

            foreach (BindingElement be in b.CreateBindingElements())
            {
                TransactionFlowBindingElement tbe =
                    be as TransactionFlowBindingElement;
                if (tbe == null)
                {
                    continue;
                }

                Assert.AreEqual(TransactionProtocol.WSAtomicTransactionOctober2004,
                                tbe.TransactionProtocol, "#1");

                return;
            }
            Assert.Fail("No transaction flow binding element.");
        }
        internal new static bool TryCreate(SecurityBindingElement sbe, TransportBindingElement transport, PrivacyNoticeBindingElement privacy, ReliableSessionBindingElement rsbe, TransactionFlowBindingElement tfbe, out Binding binding)
        {
            bool isReliableSession = (rsbe != null);
            binding = null;

            // reverse GetTransport
            HttpTransportSecurity transportSecurity = new HttpTransportSecurity();
            WSFederationHttpSecurityMode mode;
            if (!WSFederationHttpBinding.GetSecurityModeFromTransport(transport, transportSecurity, out mode))
            {
                return false;
            }

            HttpsTransportBindingElement httpsBinding = transport as HttpsTransportBindingElement;
            if (httpsBinding != null && httpsBinding.MessageSecurityVersion != null)
            {
                if (httpsBinding.MessageSecurityVersion.SecurityPolicyVersion != WS2007MessageSecurityVersion.SecurityPolicyVersion)
                {
                    return false;
                }
            }

            WSFederationHttpSecurity security;
            if (WS2007FederationHttpBinding.TryCreateSecurity(sbe, mode, transportSecurity, isReliableSession, out security))
            {
                binding = new WS2007FederationHttpBinding(security, privacy, isReliableSession);
            }

            if (rsbe != null && rsbe.ReliableMessagingVersion != ReliableMessagingVersion.WSReliableMessaging11)
            {
                return false;
            }

            if (tfbe != null && tfbe.TransactionProtocol != TransactionProtocol.WSAtomicTransaction11)
            {
                return false;
            }

            return binding != null;
        }
 internal static bool TryCreate(SecurityBindingElement sbe, TransportBindingElement transport, ReliableSessionBindingElement rsbe, TransactionFlowBindingElement tfbe, out Binding binding)
 {
     UnifiedSecurityMode mode;
     WSHttpSecurity security2;
     bool isReliableSession = rsbe != null;
     binding = null;
     HttpTransportSecurity defaultHttpTransportSecurity = WSHttpSecurity.GetDefaultHttpTransportSecurity();
     if (!WSHttpBinding.GetSecurityModeFromTransport(transport, defaultHttpTransportSecurity, out mode))
     {
         return false;
     }
     HttpsTransportBindingElement element = transport as HttpsTransportBindingElement;
     if (((element != null) && (element.MessageSecurityVersion != null)) && (element.MessageSecurityVersion.SecurityPolicyVersion != WS2007MessageSecurityVersion.SecurityPolicyVersion))
     {
         return false;
     }
     if (TryCreateSecurity(sbe, mode, defaultHttpTransportSecurity, isReliableSession, out security2))
     {
         bool flag2;
         WS2007HttpBinding binding2 = new WS2007HttpBinding(security2, isReliableSession);
         if (!WSHttpBinding.TryGetAllowCookiesFromTransport(transport, out flag2))
         {
             return false;
         }
         binding2.AllowCookies = flag2;
         binding = binding2;
     }
     if ((rsbe != null) && (rsbe.ReliableMessagingVersion != ReliableMessagingVersion.WSReliableMessaging11))
     {
         return false;
     }
     if ((tfbe != null) && (tfbe.TransactionProtocol != TransactionProtocol.WSAtomicTransaction11))
     {
         return false;
     }
     return (binding != null);
 }
Example #35
0
        private void ValidateTransactionFlowRequired(string resource, string name, ServiceEndpoint endpoint)
        {
            bool flag = false;

            for (int i = 0; i < endpoint.Contract.Operations.Count; i++)
            {
                OperationDescription     description = endpoint.Contract.Operations[i];
                TransactionFlowAttribute attribute   = description.Behaviors.Find <TransactionFlowAttribute>();
                if ((attribute != null) && (attribute.Transactions == TransactionFlowOption.Mandatory))
                {
                    flag = true;
                    break;
                }
            }
            if (flag)
            {
                CustomBinding binding = new CustomBinding(endpoint.Binding);
                TransactionFlowBindingElement element = binding.Elements.Find <TransactionFlowBindingElement>();
                if ((element == null) || !element.Transactions)
                {
                    throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new InvalidOperationException(string.Format(CultureInfo.CurrentCulture, System.ServiceModel.SR.GetString(resource), new object[] { name, binding.Name })));
                }
            }
        }
 internal static bool TryCreate(BindingElementCollection elements, out Binding binding)
 {
     WSDualHttpSecurity security;
     binding = null;
     if (elements.Count > 7)
     {
         return false;
     }
     SecurityBindingElement securityElement = null;
     HttpTransportBindingElement transport = null;
     MessageEncodingBindingElement encoding = null;
     TransactionFlowBindingElement txFlow = null;
     ReliableSessionBindingElement session = null;
     CompositeDuplexBindingElement compositeDuplex = null;
     OneWayBindingElement oneWay = null;
     foreach (BindingElement element8 in elements)
     {
         if (element8 is SecurityBindingElement)
         {
             securityElement = element8 as SecurityBindingElement;
         }
         else if (element8 is TransportBindingElement)
         {
             transport = element8 as HttpTransportBindingElement;
         }
         else if (element8 is MessageEncodingBindingElement)
         {
             encoding = element8 as MessageEncodingBindingElement;
         }
         else if (element8 is TransactionFlowBindingElement)
         {
             txFlow = element8 as TransactionFlowBindingElement;
         }
         else if (element8 is ReliableSessionBindingElement)
         {
             session = element8 as ReliableSessionBindingElement;
         }
         else if (element8 is CompositeDuplexBindingElement)
         {
             compositeDuplex = element8 as CompositeDuplexBindingElement;
         }
         else if (element8 is OneWayBindingElement)
         {
             oneWay = element8 as OneWayBindingElement;
         }
         else
         {
             return false;
         }
     }
     if (transport == null)
     {
         return false;
     }
     if (encoding == null)
     {
         return false;
     }
     if (!encoding.CheckEncodingVersion(System.ServiceModel.EnvelopeVersion.Soap12))
     {
         return false;
     }
     if (compositeDuplex == null)
     {
         return false;
     }
     if (oneWay == null)
     {
         return false;
     }
     if (session == null)
     {
         return false;
     }
     if (txFlow == null)
     {
         txFlow = GetDefaultTransactionFlowBindingElement();
     }
     if (!TryCreateSecurity(securityElement, out security))
     {
         return false;
     }
     WSDualHttpBinding binding2 = new WSDualHttpBinding(transport, encoding, txFlow, session, compositeDuplex, oneWay, security);
     if (!binding2.IsBindingElementsMatch(transport, encoding, txFlow, session, compositeDuplex, oneWay))
     {
         return false;
     }
     binding = binding2;
     return true;
 }
 private bool IsBindingElementsMatch(HttpTransportBindingElement transport, MessageEncodingBindingElement encoding, TransactionFlowBindingElement txFlow, ReliableSessionBindingElement session, CompositeDuplexBindingElement compositeDuplex, OneWayBindingElement oneWay)
 {
     if (!this.httpTransport.IsMatch(transport))
     {
         return false;
     }
     if (this.MessageEncoding == WSMessageEncoding.Text)
     {
         if (!this.textEncoding.IsMatch(encoding))
         {
             return false;
         }
     }
     else if ((this.MessageEncoding == WSMessageEncoding.Mtom) && !this.mtomEncoding.IsMatch(encoding))
     {
         return false;
     }
     if (!this.txFlow.IsMatch(txFlow))
     {
         return false;
     }
     if (!this.session.IsMatch(session))
     {
         return false;
     }
     if (!this.compositeDuplex.IsMatch(compositeDuplex))
     {
         return false;
     }
     if (!this.oneWay.IsMatch(oneWay))
     {
         return false;
     }
     return true;
 }
 private void InitializeFrom(HttpTransportBindingElement transport, MessageEncodingBindingElement encoding, TransactionFlowBindingElement txFlow, ReliableSessionBindingElement session, CompositeDuplexBindingElement compositeDuplex, OneWayBindingElement oneWay)
 {
     this.BypassProxyOnLocal = transport.BypassProxyOnLocal;
     this.HostNameComparisonMode = transport.HostNameComparisonMode;
     this.MaxBufferPoolSize = transport.MaxBufferPoolSize;
     this.MaxReceivedMessageSize = transport.MaxReceivedMessageSize;
     this.ProxyAddress = transport.ProxyAddress;
     this.UseDefaultWebProxy = transport.UseDefaultWebProxy;
     if (encoding is TextMessageEncodingBindingElement)
     {
         this.MessageEncoding = WSMessageEncoding.Text;
         TextMessageEncodingBindingElement element = (TextMessageEncodingBindingElement) encoding;
         this.TextEncoding = element.WriteEncoding;
         this.ReaderQuotas = element.ReaderQuotas;
     }
     else if (encoding is MtomMessageEncodingBindingElement)
     {
         this.messageEncoding = WSMessageEncoding.Mtom;
         MtomMessageEncodingBindingElement element2 = (MtomMessageEncodingBindingElement) encoding;
         this.TextEncoding = element2.WriteEncoding;
         this.ReaderQuotas = element2.ReaderQuotas;
     }
     this.TransactionFlow = txFlow.Transactions;
     this.ClientBaseAddress = compositeDuplex.ClientBaseAddress;
     if (session != null)
     {
         this.session.InactivityTimeout = session.InactivityTimeout;
         this.session.Ordered = session.Ordered;
     }
 }
 private void Initialize()
 {
     this.transport = new TcpTransportBindingElement();
     this.encoding = new BinaryMessageEncodingBindingElement();
     this.context = GetDefaultTransactionFlowBindingElement();
     this.session = new ReliableSessionBindingElement();
     this.reliableSession = new OptionalReliableSession(this.session);
 }
Example #40
0
 private NetTcpBinding(TcpTransportBindingElement transport, BinaryMessageEncodingBindingElement encoding, TransactionFlowBindingElement context, ReliableSessionBindingElement session, NetTcpSecurity security)
     : this()
 {
     _security = security;
     this.ReliableSession.Enabled = session != null;
     InitializeFrom(transport, encoding, context, session);
 }
 static TransactionFlowBindingElement GetDefaultTransactionFlowBindingElement()
 {
     TransactionFlowBindingElement tfbe = new TransactionFlowBindingElement(false);
     tfbe.TransactionProtocol = TransactionProtocol.WSAtomicTransactionOctober2004;
     return tfbe;
 }
 internal static bool TryCreate(BindingElementCollection elements, out Binding binding)
 {
     NetTcpSecurity security2;
     binding = null;
     if (elements.Count > 6)
     {
         return false;
     }
     TcpTransportBindingElement transport = null;
     BinaryMessageEncodingBindingElement encoding = null;
     TransactionFlowBindingElement context = null;
     ReliableSessionBindingElement session = null;
     SecurityBindingElement sbe = null;
     BindingElement element6 = null;
     foreach (BindingElement element7 in elements)
     {
         if (element7 is SecurityBindingElement)
         {
             sbe = element7 as SecurityBindingElement;
         }
         else if (element7 is TransportBindingElement)
         {
             transport = element7 as TcpTransportBindingElement;
         }
         else if (element7 is MessageEncodingBindingElement)
         {
             encoding = element7 as BinaryMessageEncodingBindingElement;
         }
         else if (element7 is TransactionFlowBindingElement)
         {
             context = element7 as TransactionFlowBindingElement;
         }
         else if (element7 is ReliableSessionBindingElement)
         {
             session = element7 as ReliableSessionBindingElement;
         }
         else
         {
             if (element6 != null)
             {
                 return false;
             }
             element6 = element7;
         }
     }
     if (transport == null)
     {
         return false;
     }
     if (encoding == null)
     {
         return false;
     }
     if (context == null)
     {
         context = GetDefaultTransactionFlowBindingElement();
     }
     TcpTransportSecurity tcpTransportSecurity = new TcpTransportSecurity();
     UnifiedSecurityMode modeFromTransportSecurity = GetModeFromTransportSecurity(element6);
     if (!TryCreateSecurity(sbe, modeFromTransportSecurity, session != null, element6, tcpTransportSecurity, out security2))
     {
         return false;
     }
     if (!SetTransportSecurity(element6, security2.Mode, tcpTransportSecurity))
     {
         return false;
     }
     NetTcpBinding binding2 = new NetTcpBinding(transport, encoding, context, session, security2);
     if (!binding2.IsBindingElementsMatch(transport, encoding, context, session))
     {
         return false;
     }
     binding = binding2;
     return true;
 }
 private bool IsBindingElementsMatch(TcpTransportBindingElement transport, BinaryMessageEncodingBindingElement encoding, TransactionFlowBindingElement context, ReliableSessionBindingElement session)
 {
     if (!this.transport.IsMatch(transport))
     {
         return false;
     }
     if (!this.encoding.IsMatch(encoding))
     {
         return false;
     }
     if (!this.context.IsMatch(context))
     {
         return false;
     }
     if (this.reliableSession.Enabled)
     {
         if (!this.session.IsMatch(session))
         {
             return false;
         }
     }
     else if (session != null)
     {
         return false;
     }
     return true;
 }
 private void Initialize()
 {
     lock (this)
     {
         if (!m_isInitialized)
         {
             m_transport = new RabbitMQTransportBindingElement();
             m_encoding = new TextMessageEncodingBindingElement(); // new TextMessageEncodingBindingElement();
             m_session = new ReliableSessionBindingElement();
             m_compositeDuplex = new CompositeDuplexBindingElement();
             m_transactionFlow = new TransactionFlowBindingElement();
             m_maxMessageSize = DefaultMaxMessageSize;
             m_isInitialized = true;
         }
     }
 }
 private void Initialize()
 {
     this.namedPipe = new NamedPipeTransportBindingElement();
     this.encoding = new BinaryMessageEncodingBindingElement();
     this.context = GetDefaultTransactionFlowBindingElement();
 }
 internal static bool TryCreate(BindingElementCollection elements, out Binding binding)
 {
     NetNamedPipeSecurity security;
     binding = null;
     if (elements.Count > 4)
     {
         return false;
     }
     TransactionFlowBindingElement context = null;
     BinaryMessageEncodingBindingElement encoding = null;
     WindowsStreamSecurityBindingElement wssbe = null;
     NamedPipeTransportBindingElement namedPipe = null;
     foreach (BindingElement element5 in elements)
     {
         if (element5 is TransactionFlowBindingElement)
         {
             context = element5 as TransactionFlowBindingElement;
         }
         else if (element5 is BinaryMessageEncodingBindingElement)
         {
             encoding = element5 as BinaryMessageEncodingBindingElement;
         }
         else if (element5 is WindowsStreamSecurityBindingElement)
         {
             wssbe = element5 as WindowsStreamSecurityBindingElement;
         }
         else if (element5 is NamedPipeTransportBindingElement)
         {
             namedPipe = element5 as NamedPipeTransportBindingElement;
         }
         else
         {
             return false;
         }
     }
     if (namedPipe == null)
     {
         return false;
     }
     if (encoding == null)
     {
         return false;
     }
     if (context == null)
     {
         context = GetDefaultTransactionFlowBindingElement();
     }
     if (!TryCreateSecurity(wssbe, out security))
     {
         return false;
     }
     NetNamedPipeBinding binding2 = new NetNamedPipeBinding(security);
     binding2.InitializeFrom(namedPipe, encoding, context);
     if (!binding2.IsBindingElementsMatch(namedPipe, encoding, context))
     {
         return false;
     }
     binding = binding2;
     return true;
 }
 private void Initialize()
 {
     this.httpTransport = new HttpTransportBindingElement();
     this.messageEncoding = WSMessageEncoding.Text;
     this.txFlow = GetDefaultTransactionFlowBindingElement();
     this.session = new ReliableSessionBindingElement(true);
     this.textEncoding = new TextMessageEncodingBindingElement();
     this.textEncoding.MessageVersion = MessageVersion.Soap12WSAddressing10;
     this.mtomEncoding = new MtomMessageEncodingBindingElement();
     this.mtomEncoding.MessageVersion = MessageVersion.Soap12WSAddressing10;
     this.compositeDuplex = new CompositeDuplexBindingElement();
     this.reliableSession = new System.ServiceModel.ReliableSession(this.session);
     this.oneWay = new OneWayBindingElement();
 }
 void Initialize()
 {
     httpTransport = new HttpTransportBindingElement();
     httpsTransport = new HttpsTransportBindingElement();
     messageEncoding = WSHttpBindingDefaults.MessageEncoding;
     txFlow = GetDefaultTransactionFlowBindingElement();
     session = new ReliableSessionBindingElement(true);
     textEncoding = new TextMessageEncodingBindingElement();
     textEncoding.MessageVersion = MessageVersion.Soap12WSAddressing10;
     mtomEncoding = new MtomMessageEncodingBindingElement();
     mtomEncoding.MessageVersion = MessageVersion.Soap12WSAddressing10;
     reliableSession = new OptionalReliableSession(session);
 }
 private void InitializeFrom(TcpTransportBindingElement transport, BinaryMessageEncodingBindingElement encoding, TransactionFlowBindingElement context, ReliableSessionBindingElement session)
 {
     this.HostNameComparisonMode = transport.HostNameComparisonMode;
     this.MaxBufferPoolSize = transport.MaxBufferPoolSize;
     this.MaxBufferSize = transport.MaxBufferSize;
     this.MaxConnections = transport.MaxPendingConnections;
     this.ListenBacklog = transport.ListenBacklog;
     this.MaxReceivedMessageSize = transport.MaxReceivedMessageSize;
     this.PortSharingEnabled = transport.PortSharingEnabled;
     this.TransferMode = transport.TransferMode;
     this.ReaderQuotas = encoding.ReaderQuotas;
     this.TransactionFlow = context.Transactions;
     this.TransactionProtocol = context.TransactionProtocol;
     if (session != null)
     {
         this.session.InactivityTimeout = session.InactivityTimeout;
         this.session.Ordered = session.Ordered;
     }
 }
        void InitializeFrom(HttpTransportBindingElement transport, MessageEncodingBindingElement encoding, TransactionFlowBindingElement txFlow, ReliableSessionBindingElement session)
        {
            // transport
            this.BypassProxyOnLocal = transport.BypassProxyOnLocal;
            this.HostNameComparisonMode = transport.HostNameComparisonMode;
            this.MaxBufferPoolSize = transport.MaxBufferPoolSize;
            this.MaxReceivedMessageSize = transport.MaxReceivedMessageSize;
            this.ProxyAddress = transport.ProxyAddress;
            this.UseDefaultWebProxy = transport.UseDefaultWebProxy;

            // this binding only supports Text and Mtom encoding
            if (encoding is TextMessageEncodingBindingElement)
            {
                this.MessageEncoding = WSMessageEncoding.Text;
                TextMessageEncodingBindingElement text = (TextMessageEncodingBindingElement)encoding;
                this.TextEncoding = text.WriteEncoding;
                this.ReaderQuotas = text.ReaderQuotas;

            }
            else if (encoding is MtomMessageEncodingBindingElement)
            {
                messageEncoding = WSMessageEncoding.Mtom;
                MtomMessageEncodingBindingElement mtom = (MtomMessageEncodingBindingElement)encoding;
                this.TextEncoding = mtom.WriteEncoding;
                this.ReaderQuotas = mtom.ReaderQuotas;
            }
            this.TransactionFlow = txFlow.Transactions;
            this.reliableSession.Enabled = session != null;

            //session
            if (session != null)
            {
                // only set properties that have standard binding manifestations
                this.session.InactivityTimeout = session.InactivityTimeout;
                this.session.Ordered = session.Ordered;
            }
        }
Example #51
0
        internal static bool TryCreate(BindingElementCollection elements, out Binding binding)
        {
            binding = null;
            if (elements.Count > 6)
            {
                return(false);
            }

            // collect all binding elements
            TcpTransportBindingElement          transport = null;
            BinaryMessageEncodingBindingElement encoding  = null;
            TransactionFlowBindingElement       context   = null;
            ReliableSessionBindingElement       session   = null;
            SecurityBindingElement wsSecurity             = null;
            BindingElement         transportSecurity      = null;

            foreach (BindingElement element in elements)
            {
                if (element is SecurityBindingElement)
                {
                    wsSecurity = element as SecurityBindingElement;
                }
                else if (element is TransportBindingElement)
                {
                    transport = element as TcpTransportBindingElement;
                }
                else if (element is MessageEncodingBindingElement)
                {
                    encoding = element as BinaryMessageEncodingBindingElement;
                }
                else if (element is TransactionFlowBindingElement)
                {
                    context = element as TransactionFlowBindingElement;
                }
                else if (element is ReliableSessionBindingElement)
                {
                    session = element as ReliableSessionBindingElement;
                }
                else
                {
                    if (transportSecurity != null)
                    {
                        return(false);
                    }
                    transportSecurity = element;
                }
            }

            if (transport == null)
            {
                return(false);
            }
            if (encoding == null)
            {
                return(false);
            }
            if (context == null)
            {
                context = GetDefaultTransactionFlowBindingElement();
            }

            TcpTransportSecurity tcpTransportSecurity = new TcpTransportSecurity();
            UnifiedSecurityMode  mode = GetModeFromTransportSecurity(transportSecurity);

            NetTcpSecurity security;

            if (!TryCreateSecurity(wsSecurity, mode, session != null, transportSecurity, tcpTransportSecurity, out security))
            {
                return(false);
            }

            if (!SetTransportSecurity(transportSecurity, security.Mode, tcpTransportSecurity))
            {
                return(false);
            }

            NetTcpBinding netTcpBinding = new NetTcpBinding(transport, encoding, context, session, security);

            if (!netTcpBinding.IsBindingElementsMatch(transport, encoding, context, session))
            {
                return(false);
            }

            binding = netTcpBinding;
            return(true);
        }
        // check that properties of the HttpTransportBindingElement and 
        // MessageEncodingBindingElement not exposed as properties on BasicHttpBinding 
        // match default values of the binding elements
        bool IsBindingElementsMatch(HttpTransportBindingElement transport, MessageEncodingBindingElement encoding, TransactionFlowBindingElement txFlow, ReliableSessionBindingElement session)
        {

            if (!this.GetTransport().IsMatch(transport))
                return false;
            if (this.MessageEncoding == WSMessageEncoding.Text)
            {
                if (!this.textEncoding.IsMatch(encoding))
                    return false;
            }
            else if (this.MessageEncoding == WSMessageEncoding.Mtom)
            {
                if (!this.mtomEncoding.IsMatch(encoding))
                    return false;
            }
            if (!this.txFlow.IsMatch(txFlow))
                return false;

            if (reliableSession.Enabled)
            {
                if (!this.session.IsMatch(session))
                    return false;
            }
            else if (session != null)
            {
                return false;
            }

            return true;
        }
        static bool EndpointAllowsTransactionFlow(ServiceEndpoint endpoint, BindingElementCollection elements)
        {
            TransactionFlowBindingElement flow = elements.Find <TransactionFlowBindingElement>();

            return(flow != null && ContractAllowsTransactionFlow(endpoint.Contract));
        }
        internal static bool TryCreate(BindingElementCollection elements, out Binding binding)
        {
            binding = null;
            if (elements.Count > 6)
                return false;

            // collect all binding elements
            PrivacyNoticeBindingElement privacy = null;
            TransactionFlowBindingElement txFlow = null;
            ReliableSessionBindingElement session = null;
            SecurityBindingElement security = null;
            MessageEncodingBindingElement encoding = null;
            HttpTransportBindingElement transport = null;

            foreach (BindingElement element in elements)
            {
                if (element is SecurityBindingElement)
                    security = element as SecurityBindingElement;
                else if (element is TransportBindingElement)
                    transport = element as HttpTransportBindingElement;
                else if (element is MessageEncodingBindingElement)
                    encoding = element as MessageEncodingBindingElement;
                else if (element is TransactionFlowBindingElement)
                    txFlow = element as TransactionFlowBindingElement;
                else if (element is ReliableSessionBindingElement)
                    session = element as ReliableSessionBindingElement;
                else if (element is PrivacyNoticeBindingElement)
                    privacy = element as PrivacyNoticeBindingElement;
                else
                    return false;
            }

            if (transport == null)
                return false;
            if (encoding == null)
                return false;

            if (!transport.AuthenticationScheme.IsSingleton())
            {
                //multiple authentication schemes selected -- not supported in StandardBindings
                return false;
            }

            HttpsTransportBindingElement httpsTransport = transport as HttpsTransportBindingElement;
            if ( ( security != null ) && ( httpsTransport != null ) && ( httpsTransport.RequireClientCertificate != TransportDefaults.RequireClientCertificate ) )
            {
                return false;
            }

            if (null != privacy || !WSHttpBinding.TryCreate(security, transport, session, txFlow, out binding))
                if (!WSFederationHttpBinding.TryCreate(security, transport, privacy, session, txFlow, out binding))
                    if (!WS2007HttpBinding.TryCreate(security, transport, session, txFlow, out binding))
                        if (!WS2007FederationHttpBinding.TryCreate(security, transport, privacy, session, txFlow, out binding))
                            return false;

            if (txFlow == null)
            {
                txFlow = GetDefaultTransactionFlowBindingElement();
                if ((binding is WS2007HttpBinding) || (binding is WS2007FederationHttpBinding))
                {
                    txFlow.TransactionProtocol = TransactionProtocol.WSAtomicTransaction11;
                }
            }

            WSHttpBindingBase wSHttpBindingBase = binding as WSHttpBindingBase;
            wSHttpBindingBase.InitializeFrom(transport, encoding, txFlow, session);
            if (!wSHttpBindingBase.IsBindingElementsMatch(transport, encoding, txFlow, session))
                return false;

            return true;
        }
        internal static bool TryCreate(BindingElementCollection elements, out Binding binding)
        {
            binding = null;
            if (elements.Count > 4)
                return false;

            TransactionFlowBindingElement context = null;
            BinaryMessageEncodingBindingElement encoding = null;
            WindowsStreamSecurityBindingElement security = null;
            NamedPipeTransportBindingElement namedPipe = null;

            foreach (BindingElement element in elements)
            {
                if (element is TransactionFlowBindingElement)
                    context = element as TransactionFlowBindingElement;
                else if (element is BinaryMessageEncodingBindingElement)
                    encoding = element as BinaryMessageEncodingBindingElement;
                else if (element is WindowsStreamSecurityBindingElement)
                    security = element as WindowsStreamSecurityBindingElement;
                else if (element is NamedPipeTransportBindingElement)
                    namedPipe = element as NamedPipeTransportBindingElement;
                else
                    return false;
            }

            if (namedPipe == null)
                return false;

            if (encoding == null)
                return false;

            if (context == null)
                context = GetDefaultTransactionFlowBindingElement();

            NetNamedPipeSecurity pipeSecurity;
            if (!TryCreateSecurity(security, out pipeSecurity))
                return false;

            NetNamedPipeBinding netNamedPipeBinding = new NetNamedPipeBinding(pipeSecurity);
            netNamedPipeBinding.InitializeFrom(namedPipe, encoding, context);

            if (!netNamedPipeBinding.IsBindingElementsMatch(namedPipe, encoding, context))
                return false;

            binding = netNamedPipeBinding;
            return true;
        }
		public override BindingElementCollection CreateBindingElements ()
		{
			BindingElement tx = new TransactionFlowBindingElement (TransactionProtocol.WSAtomicTransactionOctober2004);
			SecurityBindingElement sec = CreateMessageSecurity ();
			var msg = new BinaryMessageEncodingBindingElement ();
			if (ReaderQuotas != null)
				ReaderQuotas.CopyTo (msg.ReaderQuotas);
			var trsec = CreateTransportSecurity ();
			BindingElement tr = GetTransport ();
			List<BindingElement> list = new List<BindingElement> ();
			if (tx != null)
				list.Add (tx);
			if (sec != null)
				list.Add (sec);
			list.Add (msg);
			if (trsec != null)
				list.Add (trsec);
			list.Add (tr);
			return new BindingElementCollection (list.ToArray ());
		}
 TransactionFlowBindingElement EnsureBindingElement(PolicyConversionContext context)
 {
     TransactionFlowBindingElement settings = context.BindingElements.Find<TransactionFlowBindingElement>();
     if (settings == null)
     {
         settings = new TransactionFlowBindingElement(false);
         context.BindingElements.Add(settings);
     }
     return settings;
 }
 private bool IsBindingElementsMatch(NamedPipeTransportBindingElement namedPipe, BinaryMessageEncodingBindingElement encoding, TransactionFlowBindingElement context)
 {
     if (!this.namedPipe.IsMatch(namedPipe))
     {
         return false;
     }
     if (!this.encoding.IsMatch(encoding))
     {
         return false;
     }
     if (!this.context.IsMatch(context))
     {
         return false;
     }
     return true;
 }