internal virtual void InitializeFrom(HttpTransportBindingElement transport, MessageEncodingBindingElement encoding)
        {
            this.BypassProxyOnLocal               = transport.BypassProxyOnLocal;
            this.HostNameComparisonMode           = transport.HostNameComparisonMode;
            this.MaxBufferPoolSize                = transport.MaxBufferPoolSize;
            this.MaxBufferSize                    = transport.MaxBufferSize;
            this.MaxReceivedMessageSize           = transport.MaxReceivedMessageSize;
            this.ProxyAddress                     = transport.ProxyAddress;
            this.TransferMode                     = transport.TransferMode;
            this.UseDefaultWebProxy               = transport.UseDefaultWebProxy;
            this.httpTransport.WebSocketSettings  = transport.WebSocketSettings;
            this.httpsTransport.WebSocketSettings = transport.WebSocketSettings;

            if (encoding is TextMessageEncodingBindingElement)
            {
                TextMessageEncodingBindingElement text = (TextMessageEncodingBindingElement)encoding;
                this.TextEncoding = text.WriteEncoding;
                this.ReaderQuotas = text.ReaderQuotas;
            }
            else if (encoding is MtomMessageEncodingBindingElement)
            {
                MtomMessageEncodingBindingElement mtom = (MtomMessageEncodingBindingElement)encoding;
                this.TextEncoding = mtom.WriteEncoding;
                this.ReaderQuotas = mtom.ReaderQuotas;
            }

            this.BasicHttpSecurity.Transport.ExtendedProtectionPolicy = transport.ExtendedProtectionPolicy;
        }
Пример #2
0
        protected ServiceBusChannelListener(BindingContext context, NetMessagingTransportBindingElement transport) : base(context.Binding)
        {
            this.listenUri = context.ListenUriBaseAddress;
            if (!string.IsNullOrEmpty(context.ListenUriRelativeAddress))
            {
                this.listenUri = new System.Uri(context.ListenUriBaseAddress, context.ListenUriRelativeAddress);
            }
            this.MaxBufferSize         = (int)Math.Min(transport.MaxReceivedMessageSize, (long)2147483647);
            this.ReceiveContextEnabled = transport.ReceiveContextEnabled;
            MessageEncodingBindingElement messageEncodingBindingElement = context.BindingParameters.Find <MessageEncodingBindingElement>();

            if (messageEncodingBindingElement == null)
            {
                messageEncodingBindingElement = Microsoft.ServiceBus.Messaging.Channels.TransportDefaults.CreateDefaultEncoder();
            }
            this.MessageEncoderFactory    = messageEncodingBindingElement.CreateMessageEncoderFactory();
            this.MessagingFactorySettings = transport.CreateMessagingFactorySettings(context);
            this.MessagingAddress         = new Microsoft.ServiceBus.Messaging.MessagingAddress(this.Uri, this.MessagingFactorySettings.NetMessagingTransportSettings.GatewayMode);
            if (this.MessagingAddress.Type != MessagingAddressType.Entity)
            {
                throw Microsoft.ServiceBus.Messaging.FxTrace.Exception.Argument("ListenUriBaseAddress", SRClient.EntityNameNotFound(this.MessagingAddress.ToString()));
            }
            this.TransportBindingElement = transport;
            this.PrefetchCount           = transport.PrefetchCount;
        }
Пример #3
0
        public override IChannelListener <TChannel> BuildChannelListener <TChannel>(BindingContext context)
            where TChannel : class, IChannel
        {
            if (typeof(TChannel) != typeof(IReplyChannel))
            {
                ExceptionUtility exceptionUtility        = Microsoft.ServiceBus.Diagnostics.DiagnosticUtility.ExceptionUtility;
                string           channelTypeNotSupported = Resources.ChannelTypeNotSupported;
                object[]         objArray = new object[] { typeof(TChannel) };
                throw exceptionUtility.ThrowHelperArgument("TChannel", Microsoft.ServiceBus.SR.GetString(channelTypeNotSupported, objArray));
            }
            NameSettings nameSetting = context.BindingParameters.Find <NameSettings>();

            if (nameSetting == null)
            {
                nameSetting = new NameSettings();
                context.BindingParameters.Add(nameSetting);
            }
            nameSetting.ServiceSettings.ListenerType                  = ListenerType.RelayedHttp;
            nameSetting.ServiceSettings.TransportProtection           = (this is HttpsRelayTransportBindingElement ? RelayTransportProtectionMode.EndToEnd : RelayTransportProtectionMode.None);
            nameSetting.ServiceSettings.RelayClientAuthenticationType = this.relayClientAuthenticationType;
            nameSetting.ServiceSettings.IsDynamic = this.IsDynamic;
            MessageEncodingBindingElement messageEncodingBindingElement = context.BindingParameters.Find <MessageEncodingBindingElement>();
            BindingContext bindingContext = this.CreateInnerListenerBindingContext(context);

            if (messageEncodingBindingElement != null)
            {
                context.BindingParameters.Remove <MessageEncodingBindingElement>();
            }
            return((IChannelListener <TChannel>)(new RelayHttpTransportChannelListener(context, messageEncodingBindingElement, bindingContext.BuildInnerChannelListener <IReplyChannel>())));
        }
Пример #4
0
        /// <summary>
        /// Constructor.
        /// </summary>
        /// <param name="uri">The transport endpoint address URI (or <c>null</c>).</param>
        public LillTekBinding(Uri uri)
        {
            if (uri == null)
            {
                uri = ServiceModelHelper.CreateUniqueUri();
            }

            switch (uri.Scheme.ToLowerInvariant())
            {
            case "lilltek.logical":

                transport = new LogicalTransportBindingElement();
                break;

            case "lilltek.abstract":

                transport = new AbstractTransportBindingElement();
                break;

            default:

                throw new ArgumentException(string.Format("Invalid LillTek Transport scheme [{0}].", uri.Scheme), "uri");
            }

            encoding = new BinaryMessageEncodingBindingElement();
        }
Пример #5
0
        private bool hostStarted;                                               // Indicates whether call to ChannelHost.Start() is current

        //---------------------------------------------------------------------
        // Implementation

        /// <summary>
        /// Constructor.
        /// </summary>
        /// <param name="context">The <see cref="BindingContext" /> holding the information necessary to construct the channel stack.</param>
        /// <exception cref="InvalidOperationException">Thrown if problems were found with the binding parameters.</exception>
        internal LillTekChannelListener(BindingContext context)
        {
            this.maxAcceptedChannels = ServiceModelHelper.MaxAcceptedChannels;      // $todo(jeff.lill): Hardcoded
            bkTaskInterval           = ServiceModelHelper.DefaultBkTaskInterval;    //                   This too

            this.context     = context;
            this.uri         = GetListenUri(context);
            this.ep          = ServiceModelHelper.ToMsgEP(uri);
            this.onBkTask    = new AsyncCallback(OnBkTask);
            this.sessionMode = false;
            this.hostStarted = false;

            // Initialize the message encoder factory from the binding context if
            // one was specified.  Use the binary message encoding factory otherwise.

            if (context.BindingParameters.FindAll <MessageEncodingBindingElement>().Count > 1)
            {
                throw new InvalidOperationException("Multiple MessageEncodingBindingElements were found in the BindingParameters of the BindingContext.");
            }

            MessageEncodingBindingElement element = context.BindingParameters.Find <MessageEncodingBindingElement>();

            if (element != null)
            {
                messageEncoderFactory = element.CreateMessageEncoderFactory();
            }
            else
            {
                messageEncoderFactory = new BinaryMessageEncodingBindingElement().CreateMessageEncoderFactory();
            }
        }
Пример #6
0
 public RelayHttpTransportChannelListener(BindingContext context, MessageEncodingBindingElement encodingBindingElement, IChannelListener <IReplyChannel> innerChannelListener) : base(context.Binding, innerChannelListener)
 {
     this.innerChannelListener = innerChannelListener;
     this.listenUri            = this.innerChannelListener.Uri;
     this.encoder         = encodingBindingElement.CreateMessageEncoderFactory().Encoder;
     this.preserveRawHttp = context.BindingParameters.Find <NameSettings>().ServiceSettings.PreserveRawHttp;
 }
Пример #7
0
 private void InitializeFrom(HttpTransportBindingElement transport, MessageEncodingBindingElement encoding, System.ServiceModel.Channels.TransactionFlowBindingElement txFlow, System.ServiceModel.Channels.ReliableSessionBindingElement session)
 {
     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.reliableSession.Enabled = session != null;
     if (session != null)
     {
         this.session.InactivityTimeout = session.InactivityTimeout;
         this.session.Ordered           = session.Ordered;
     }
 }
Пример #8
0
 private void InitializeFrom(HttpRelayTransportBindingElement transport, MessageEncodingBindingElement encoding, System.ServiceModel.Channels.ReliableSessionBindingElement session)
 {
     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 textMessageEncodingBindingElement = (TextMessageEncodingBindingElement)encoding;
         this.TextEncoding = textMessageEncodingBindingElement.WriteEncoding;
         this.ReaderQuotas = textMessageEncodingBindingElement.ReaderQuotas;
     }
     else if (encoding is MtomMessageEncodingBindingElement)
     {
         this.messageEncoding = WSMessageEncoding.Mtom;
         MtomMessageEncodingBindingElement mtomMessageEncodingBindingElement = (MtomMessageEncodingBindingElement)encoding;
         this.TextEncoding = mtomMessageEncodingBindingElement.WriteEncoding;
         this.ReaderQuotas = mtomMessageEncodingBindingElement.ReaderQuotas;
     }
     this.reliableSession.Enabled = session != null;
     if (session != null)
     {
         this.session.InactivityTimeout = session.InactivityTimeout;
         this.session.Ordered           = session.Ordered;
     }
 }
        public void ExportEndpoint(WsdlExporter exporter, WsdlEndpointConversionContext context)
        {
            BindingElementCollection      bindingElements        = context.Endpoint.Binding.CreateBindingElements();
            MessageEncodingBindingElement encodingBindingElement = bindingElements.Find <MessageEncodingBindingElement>();

            if (encodingBindingElement == null)
            {
                encodingBindingElement = new TextMessageEncodingBindingElement();
            }

            // Set SoapBinding Transport URI
            if (UdpPolicyStrings.UdpNamespace != null)
            {
                WsdlNS.SoapBinding soapBinding = GetSoapBinding(context, exporter);

                if (soapBinding != null)
                {
                    soapBinding.Transport = UdpPolicyStrings.UdpNamespace;
                }
            }

            if (context.WsdlPort != null)
            {
                AddAddressToWsdlPort(context.WsdlPort, context.Endpoint.Address, encodingBindingElement.MessageVersion.Addressing);
            }
        }
 public CryptEncodingBindingElement(MessageEncodingBindingElement innerMessageEncodingBindingElement, string key, string iv)
 {
     this.readerQuotas = new XmlDictionaryReaderQuotas();
     this.key          = key;
     this.iv           = iv;
     this.innerMessageEncodingBindingElement = innerMessageEncodingBindingElement;
 }
        void InitializeFrom(HttpTransportBindingElement transport, MessageEncodingBindingElement encoding, ReliableSessionBindingElement session)
        {
            this.InitializeFrom(transport, encoding);
            if (encoding is BinaryMessageEncodingBindingElement)
            {
                this.messageEncoding = NetHttpMessageEncoding.Binary;
                BinaryMessageEncodingBindingElement binary = (BinaryMessageEncodingBindingElement)encoding;
                this.ReaderQuotas = binary.ReaderQuotas;
            }

            if (encoding is TextMessageEncodingBindingElement)
            {
                this.messageEncoding = NetHttpMessageEncoding.Text;
            }
            else if (encoding is MtomMessageEncodingBindingElement)
            {
                this.messageEncoding = NetHttpMessageEncoding.Mtom;
            }

            if (session != null)
            {
                // only set properties that have standard binding manifestations
                this.session.InactivityTimeout = session.InactivityTimeout;
                this.session.Ordered           = session.Ordered;
            }
        }
Пример #12
0
        private void InitializeFrom(HttpTransportBindingElement transport, MessageEncodingBindingElement encoding, TransactionFlowBindingElement txFlow, ReliableSessionBindingElement session)
        {
            this.HostNameComparisonMode = transport.HostNameComparisonMode;
            this.MaxBufferPoolSize      = transport.MaxBufferPoolSize;
            this.MaxReceivedMessageSize = transport.MaxReceivedMessageSize;

            // 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;
            _reliableSession.Enabled = session != null;

            //session
            if (session != null)
            {
                // only set properties that have standard binding manifestations
                _session.InactivityTimeout = session.InactivityTimeout;
                _session.Ordered           = session.Ordered;
            }
        }
Пример #13
0
        private bool IsBindingElementsMatch(HttpTransportBindingElement transport, MessageEncodingBindingElement encoding)
        {
            switch (this.MessageEncoding)
            {
            case NetHttpMessageEncoding.Text:
                if (!this.TextMessageEncodingBindingElement.IsMatch(encoding))
                {
                    return(false);
                }

                break;

            case NetHttpMessageEncoding.Mtom:
                return(false);

            default:        // NetHttpMessageEncoding.Binary
                if (!_binaryMessageEncodingBindingElement.IsMatch(encoding))
                {
                    return(false);
                }

                break;
            }

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

            return(true);
        }
Пример #14
0
 private bool IsBindingElementsMatch(HttpTransportBindingElement transport, MessageEncodingBindingElement encoding, System.ServiceModel.Channels.TransactionFlowBindingElement txFlow, System.ServiceModel.Channels.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) && !this.mtomEncoding.IsMatch(encoding))
     {
         return(false);
     }
     if (!this.txFlow.IsMatch(txFlow))
     {
         return(false);
     }
     if (this.reliableSession.Enabled)
     {
         if (!this.session.IsMatch(session))
         {
             return(false);
         }
     }
     else if (session != null)
     {
         return(false);
     }
     return(true);
 }
Пример #15
0
 void Initialize()
 {
     transport       = new UdpTransportBindingElement();
     session         = new ReliableSessionBindingElement();
     compositeDuplex = new CompositeDuplexBindingElement();
     encoding        = new TextMessageEncodingBindingElement();
 }
 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);
 }
Пример #17
0
 public HttpChannelListener(HttpTransportBindingElement source, BindingContext context) : base(context)
 {
     this.Source = source;
     if (Uri != null && source.Scheme != Uri.Scheme)
     {
         throw new ArgumentException(String.Format("Requested listen uri scheme must be {0}, but was {1}.", source.Scheme, Uri.Scheme));
     }
     foreach (BindingElement be in context.Binding.Elements)
     {
         MessageEncodingBindingElement mbe = be as MessageEncodingBindingElement;
         if (mbe != null)
         {
             MessageEncoder = CreateEncoder <TChannel>(mbe);
             break;
         }
     }
     if (MessageEncoder == null)
     {
         MessageEncoder = new TextMessageEncoder(MessageVersion.Default, Encoding.UTF8);
     }
     if (context.BindingParameters.Contains(typeof(ServiceCredentials)))
     {
         SecurityTokenManager = new ServiceCredentialsSecurityTokenManager((ServiceCredentials)context.BindingParameters[typeof(ServiceCredentials)]);
     }
 }
        void BasicHttpBindingSecurityModeTransportPropertiesPropagated()
        {
            int    expectedMaxBufferSize          = 7654321;
            int    expectedMaxReceivedMessageSize = 87654321;
            string expectedScheme = "https";

            BasicHttpBinding binding = new BasicHttpBinding(BasicHttpSecurityMode.Transport);

            // Check the default values are as expected
            Assert.Equal(TransferMode.Buffered, binding.TransferMode);
            Assert.Equal(MessageVersion.Soap11, binding.MessageVersion);
            Assert.Equal(65536, binding.MaxReceivedMessageSize);
            Assert.Equal(65536, binding.MaxBufferSize);
            Assert.Equal(expectedScheme, binding.Scheme);

            binding.MaxBufferSize          = expectedMaxBufferSize;
            binding.MaxReceivedMessageSize = expectedMaxReceivedMessageSize;
            binding.TransferMode           = TransferMode.Streamed;

            BindingElementCollection    bindingElements = binding.CreateBindingElements();
            HttpTransportBindingElement htbe            = bindingElements.Find <HttpTransportBindingElement>();

            Assert.Equal("CoreWCF.Channels.HttpsTransportBindingElement", htbe.GetType().FullName);
            Assert.Equal(expectedMaxBufferSize, htbe.MaxBufferSize);
            Assert.Equal(expectedMaxReceivedMessageSize, htbe.MaxReceivedMessageSize);
            Assert.Equal(expectedScheme, htbe.Scheme);
            Assert.Equal(TransferMode.Streamed, htbe.TransferMode);
            MessageEncodingBindingElement mebe = bindingElements.Find <MessageEncodingBindingElement>();

            Assert.Equal("CoreWCF.Channels.TextMessageEncodingBindingElement", mebe.GetType().FullName);
            Assert.Equal(MessageVersion.Soap11, mebe.MessageVersion);
        }
Пример #19
0
        /// <summary>
        /// Implement to include for exporting a custom policy assertion about bindings.
        /// </summary>
        /// <param name="exporter">The <see cref="T:System.ServiceModel.Description.MetadataExporter" /> that you can use to modify the exporting process.</param>
        /// <param name="context">The <see cref="T:System.ServiceModel.Description.PolicyConversionContext" /> that you can use to insert your custom policy assertion.</param>
        public void ExportPolicy(MetadataExporter exporter, PolicyConversionContext context)
        {
            if (exporter == null)
            {
                throw new ArgumentNullException("exporter");
            }

            if (context == null)
            {
                throw new ArgumentNullException("context");
            }

            bool createdNew = false;
            MessageEncodingBindingElement encodingBindingElement = context.BindingElements.Find <MessageEncodingBindingElement>();

            if (encodingBindingElement == null)
            {
                createdNew             = true;
                encodingBindingElement = new TextMessageEncodingBindingElement();
            }

            if (createdNew && encodingBindingElement is IPolicyExportExtension)
            {
                ((IPolicyExportExtension)encodingBindingElement).ExportPolicy(exporter, context);
            }

            AddWSAddressingAssertion(context, encodingBindingElement.MessageVersion.Addressing);
        }
Пример #20
0
 public CryptEncoderFactory(MessageEncodingBindingElement innerMessageEncodingBindingElement, string key, string iv)
 {
     this.innerMessageEncodingBindingElement = innerMessageEncodingBindingElement;
     this.key       = key;
     this.iv        = iv;
     messageEncoder = new CryptEncoder(this, key, iv, CompressAlgorithm.Deflate);
 }
Пример #21
0
        void IPolicyExportExtension.ExportPolicy(MetadataExporter exporter, PolicyConversionContext context)
        {
            if (exporter == null)
            {
                throw new ArgumentNullException("exporter");
            }

            if (context == null)
            {
                throw new ArgumentNullException("context");
            }

            ICollection <XmlElement> bindingAssertions = context.GetBindingAssertions();
            XmlDocument xmlDocument = new XmlDocument();

            bindingAssertions.Add(xmlDocument.CreateElement(
                                      SsbConstants.SsbNsPrefix, SsbConstants.SsbTransportAssertion, SsbConstants.SsbNs));

            bool createdNew = false;
            MessageEncodingBindingElement encodingBindingElement = context.BindingElements.Find <MessageEncodingBindingElement>();

            if (encodingBindingElement == null)
            {
                createdNew             = true;
                encodingBindingElement = SsbConstants.DefaultMessageEncodingBindingElement;
            }

            if (createdNew && encodingBindingElement is IPolicyExportExtension)
            {
                ((IPolicyExportExtension)encodingBindingElement).ExportPolicy(exporter, context);
            }

            AddWSAddressingAssertion(context, encodingBindingElement.MessageVersion.Addressing);
        }
Пример #22
0
 private void InitializeFrom(HttpTransportBindingElement transport, MessageEncodingBindingElement encoding)
 {
     this.BypassProxyOnLocal     = transport.BypassProxyOnLocal;
     this.HostNameComparisonMode = transport.HostNameComparisonMode;
     this.MaxBufferPoolSize      = transport.MaxBufferPoolSize;
     this.MaxBufferSize          = transport.MaxBufferSize;
     this.MaxReceivedMessageSize = transport.MaxReceivedMessageSize;
     this.ProxyAddress           = transport.ProxyAddress;
     this.TransferMode           = transport.TransferMode;
     this.UseDefaultWebProxy     = transport.UseDefaultWebProxy;
     this.Security.Transport.ExtendedProtectionPolicy = transport.ExtendedProtectionPolicy;
     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;
     }
 }
Пример #23
0
            public void AddBindingParameters(ServiceEndpoint endpoint, BindingParameterCollection parameters)
            {
                // get Contract info security needs, and put in BindingParameterCollection
                ISecurityCapabilities    isc      = null;
                BindingElementCollection elements = endpoint.Binding.CreateBindingElements();

                if (isc != null)
                {
                    // ensure existence of binding parameter
                    ChannelProtectionRequirements requirements = parameters.Find <ChannelProtectionRequirements>();
                    if (requirements == null)
                    {
                        requirements = new ChannelProtectionRequirements();
                        parameters.Add(requirements);
                    }

                    MessageEncodingBindingElement encoding = elements.Find <MessageEncodingBindingElement>();
                    // use endpoint.Binding.Version
                    if (encoding != null && encoding.MessageVersion.Addressing == AddressingVersion.None)
                    {
                        // This binding does not support response actions, so...
                        requirements.Add(ChannelProtectionRequirements.CreateFromContractAndUnionResponseProtectionRequirements(endpoint.Contract, isc, _isForClient));
                    }
                    else
                    {
                        requirements.Add(ChannelProtectionRequirements.CreateFromContract(endpoint.Contract, isc, _isForClient));
                    }
                }
            }
Пример #24
0
        private bool hostStarted;                                       // Indicates whether call to ChannelHost.Start() is current

        /// <summary>
        /// Constructor.
        /// </summary>
        /// <param name="context">The <see cref="BindingContext" />.</param>
        /// <exception cref="InvalidOperationException">Thrown if problems were found with the binding parameters.</exception>
        public LillTekChannelFactory(BindingContext context)
            : base()
        {
            this.channels    = new Dictionary <string, TInternal>();
            this.hostStarted = false;

            // Initialize the message encoder factory from the binding context if
            // one was specified.  Use the binary message encoding factory otherwise.

            if (context.BindingParameters.FindAll <MessageEncodingBindingElement>().Count > 1)
            {
                throw new InvalidOperationException("Multiple MessageEncodingBindingElements were found in the BindingParameters of the BindingContext.");
            }

            MessageEncodingBindingElement element = context.BindingParameters.Find <MessageEncodingBindingElement>();

            if (element != null)
            {
                messageEncoderFactory = element.CreateMessageEncoderFactory();
            }
            else
            {
                messageEncoderFactory = new BinaryMessageEncodingBindingElement().CreateMessageEncoderFactory();
            }
        }
Пример #25
0
 /// <summary>
 /// Default constructor.
 /// Creates encoding and transport binding elements.
 /// </summary>
 public SerialTransportBinding(string port)
 {
     //this.messageElement = new TextMessageEncodingBindingElement();
     this.messageElement =
         new SerialEncoderBindingElement();
     this.transportElement             = new SerialTransportBindingElement();
     this.transportElement.FactoryPort = port;
 }
Пример #26
0
 private void initialize()
 {
     _ReliableSessionBindingElement = new ReliableSessionBindingElement();
     _CompositeDuplexBindingElement = new CompositeDuplexBindingElement();
     _EncodingBindingElement        = new TextMessageEncodingBindingElement();
     _OneWayEncodingBindingElement  = new OneWayEncoderBindingElement();
     _TransportBindingElement       = new ExUdpBindingElement();
 }
Пример #27
0
 internal override void InitializeFrom(HttpTransportBindingElement transport, MessageEncodingBindingElement encoding)
 {
     base.InitializeFrom(transport, encoding);
     // BasicHttpBinding only supports Text and Mtom encoding
     if (encoding is TextMessageEncodingBindingElement)
     {
         this.MessageEncoding = WSMessageEncoding.Text;
     }
 }
Пример #28
0
    public override BindingElementCollection CreateBindingElements()
    {
        BindingElementCollection      elements = base.CreateBindingElements();
        MessageEncodingBindingElement encodingElement
            = elements.Find <MessageEncodingBindingElement>();

        encodingElement.MessageVersion
            = MessageVersion.Soap12WSAddressingAugust2004;
        return(elements);
    }
Пример #29
0
        /// <summary>
        /// Writes custom Web Services Description Language (WSDL) elements into the generated WSDL for an endpoint.
        /// </summary>
        /// <param name="exporter">The <see cref="T:System.ServiceModel.Description.WsdlExporter" /> that exports the endpoint information.</param>
        /// <param name="context">Provides mappings from exported WSDL elements to the endpoint description.</param>
        public void ExportEndpoint(WsdlExporter exporter, WsdlEndpointConversionContext context)
        {
            BindingElementCollection      bindingElements        = context.Endpoint.Binding.CreateBindingElements();
            MessageEncodingBindingElement encodingBindingElement = bindingElements.Find <MessageEncodingBindingElement>() ?? new TextMessageEncodingBindingElement();

            if (context.WsdlPort != null)
            {
                AddAddressToWsdlPort(context.WsdlPort, context.Endpoint.Address, encodingBindingElement.MessageVersion.Addressing);
            }
        }
Пример #30
0
        /// <summary>
        /// Creates a BindingElement instance
        /// </summary>
        /// <param name="transport">The trasport of this binding element.</param>
        /// <param name="extraBindings">The other elements for ths binding.</param>
        protected Binding(TransportBindingElement transport, params BindingElement[] extraBindings)
        {
            this.Transport = transport;

            BindingElement prev = null;

            if (extraBindings != null)
            {
                int len = extraBindings.Length;

                if (len > 0)
                {
                    prev = null;

                    for (int i = len - 1; i >= 0; i--)
                    {
                        BindingElement next = extraBindings[i];

                        if (prev == null)
                        {
                            this.Elements = next;
                        }
                        else
                        {
                            prev.SetNext(next);
                        }

                        prev = next;

                        if (next is MessageEncodingBindingElement)
                        {
                            this.Encoding = (MessageEncodingBindingElement)next;
                        }
                    }
                }
            }

            if (prev == null)
            {
                this.Encoding = new TextMessageEncodingBindingElement();
                this.Elements = this.Encoding;
                this.Elements.SetNext(this.Transport);
            }
            else if (this.Encoding == null)
            {
                this.Encoding = new TextMessageEncodingBindingElement();
                prev.SetNext(this.Encoding);
                this.Encoding.SetNext(this.Transport);
            }
            else
            {
                prev.SetNext(this.Transport);
            }
        }
Пример #31
0
        /// <summary>
        /// Creates a BindingElement instance
        /// </summary>
        /// <param name="transport">The trasport of this binding element.</param>
        /// <param name="extraBindings">The other elements for ths binding.</param>
        protected Binding( TransportBindingElement transport, params BindingElement[] extraBindings )
        {
            this.Transport = transport;
            
            BindingElement prev = null;

            if(extraBindings != null)
            {
                int len = extraBindings.Length;

                if(len > 0)
                {
                    prev = null;
                    
                    for(int i=len-1; i>=0; i--)
                    {
                        BindingElement next = extraBindings[i];

                        if (prev == null)
                        {
                            this.Elements = next;
                        }
                        else
                        {
                            prev.SetNext(next);
                        }

                        prev = next;

                        if(next is MessageEncodingBindingElement)
                        {
                            this.Encoding = (MessageEncodingBindingElement)next;
                        }
                    }
                }
            }

            if (prev == null)
            {
                this.Encoding = new TextMessageEncodingBindingElement();
                this.Elements = this.Encoding;
                this.Elements.SetNext(this.Transport);
            }
            else if(this.Encoding == null)
            {
                this.Encoding = new TextMessageEncodingBindingElement();
                prev.SetNext(this.Encoding);
                this.Encoding.SetNext(this.Transport);
            }
            else
            {
                prev.SetNext(this.Transport);
            }
        }