コード例 #1
0
        internal override bool IsMatch(BindingElement b)
        {
            if (!base.IsMatch(b))
            {
                return(false);
            }

            NamedPipeTransportBindingElement namedPipe = b as NamedPipeTransportBindingElement;

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

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

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

            return(true);
        }
コード例 #2
0
        /// <summary>
        /// Initializes the binding.
        /// </summary>
        /// <param name="namespaceUris">The namespace uris.</param>
        /// <param name="factory">The factory.</param>
        /// <param name="configuration">The configuration.</param>
        /// <param name="description">The description.</param>
        public UaSoapXmlOverPipeBinding(
            NamespaceTable        namespaceUris,
            EncodeableFactory     factory,
            EndpointConfiguration configuration,
            EndpointDescription   description)
        :
            base(namespaceUris, factory, configuration)
        {                   
            if (description != null && description.SecurityMode != MessageSecurityMode.None)
            {
                SymmetricSecurityBindingElement bootstrap = (SymmetricSecurityBindingElement)SecurityBindingElement.CreateMutualCertificateBindingElement();
                
                bootstrap.MessageProtectionOrder       = MessageProtectionOrder.SignBeforeEncryptAndEncryptSignature;
                bootstrap.DefaultAlgorithmSuite        = SecurityPolicies.ToSecurityAlgorithmSuite(description.SecurityPolicyUri);
                bootstrap.IncludeTimestamp             = true;
                bootstrap.MessageSecurityVersion       = MessageSecurityVersion.WSSecurity11WSTrust13WSSecureConversation13WSSecurityPolicy12BasicSecurityProfile10;
                // bootstrap.MessageSecurityVersion       = MessageSecurityVersion.WSSecurity11WSTrustFebruary2005WSSecureConversationFebruary2005WSSecurityPolicy11BasicSecurityProfile10;
                bootstrap.RequireSignatureConfirmation = false;
                bootstrap.SecurityHeaderLayout         = SecurityHeaderLayout.Strict;
                
                m_security = (SymmetricSecurityBindingElement)SecurityBindingElement.CreateSecureConversationBindingElement(bootstrap, true);
                
                m_security.MessageProtectionOrder       = MessageProtectionOrder.EncryptBeforeSign;
                m_security.DefaultAlgorithmSuite        = SecurityPolicies.ToSecurityAlgorithmSuite(description.SecurityPolicyUri);
                m_security.IncludeTimestamp             = true;
                m_security.MessageSecurityVersion       = MessageSecurityVersion.WSSecurity11WSTrust13WSSecureConversation13WSSecurityPolicy12BasicSecurityProfile10;
                // m_security.MessageSecurityVersion       = MessageSecurityVersion.WSSecurity11WSTrustFebruary2005WSSecureConversationFebruary2005WSSecurityPolicy11BasicSecurityProfile10;
                m_security.RequireSignatureConfirmation = false;
                m_security.SecurityHeaderLayout         = SecurityHeaderLayout.Strict;

                m_security.SetKeyDerivation(true);
            }
            
            m_encoding = new BinaryMessageEncodingBindingElement();
           
            // WCF does not distinguish between arrays and byte string.
            int maxArrayLength = configuration.MaxArrayLength;

            if (configuration.MaxArrayLength < configuration.MaxByteStringLength)
            {
                maxArrayLength = configuration.MaxByteStringLength;
            }

            m_encoding.ReaderQuotas.MaxArrayLength         = maxArrayLength;
            m_encoding.ReaderQuotas.MaxStringContentLength = configuration.MaxStringLength;
            m_encoding.ReaderQuotas.MaxBytesPerRead        = Int32.MaxValue;
            m_encoding.ReaderQuotas.MaxDepth               = Int32.MaxValue;
            m_encoding.ReaderQuotas.MaxNameTableCharCount  = Int32.MaxValue;

            m_transport = new System.ServiceModel.Channels.NamedPipeTransportBindingElement();

            m_transport.ManualAddressing       = false;
            m_transport.MaxBufferPoolSize      = Int32.MaxValue;
            m_transport.MaxReceivedMessageSize = configuration.MaxMessageSize;
        }
コード例 #3
0
        /// <summary>
        /// Initializes the binding.
        /// </summary>
        /// <param name="namespaceUris">The namespace uris.</param>
        /// <param name="factory">The factory.</param>
        /// <param name="configuration">The configuration.</param>
        /// <param name="description">The description.</param>
        public UaSoapXmlOverPipeBinding(
            NamespaceTable namespaceUris,
            EncodeableFactory factory,
            EndpointConfiguration configuration,
            EndpointDescription description)
            :
            base(namespaceUris, factory, configuration)
        {
            if (description != null && description.SecurityMode != MessageSecurityMode.None)
            {
                SymmetricSecurityBindingElement bootstrap = (SymmetricSecurityBindingElement)SecurityBindingElement.CreateMutualCertificateBindingElement();

                bootstrap.MessageProtectionOrder = MessageProtectionOrder.SignBeforeEncryptAndEncryptSignature;
                bootstrap.DefaultAlgorithmSuite  = SecurityPolicies.ToSecurityAlgorithmSuite(description.SecurityPolicyUri);
                bootstrap.IncludeTimestamp       = true;
                bootstrap.MessageSecurityVersion = MessageSecurityVersion.WSSecurity11WSTrust13WSSecureConversation13WSSecurityPolicy12BasicSecurityProfile10;
                // bootstrap.MessageSecurityVersion       = MessageSecurityVersion.WSSecurity11WSTrustFebruary2005WSSecureConversationFebruary2005WSSecurityPolicy11BasicSecurityProfile10;
                bootstrap.RequireSignatureConfirmation = false;
                bootstrap.SecurityHeaderLayout         = SecurityHeaderLayout.Strict;

                m_security = (SymmetricSecurityBindingElement)SecurityBindingElement.CreateSecureConversationBindingElement(bootstrap, true);

                m_security.MessageProtectionOrder = MessageProtectionOrder.EncryptBeforeSign;
                m_security.DefaultAlgorithmSuite  = SecurityPolicies.ToSecurityAlgorithmSuite(description.SecurityPolicyUri);
                m_security.IncludeTimestamp       = true;
                m_security.MessageSecurityVersion = MessageSecurityVersion.WSSecurity11WSTrust13WSSecureConversation13WSSecurityPolicy12BasicSecurityProfile10;
                // m_security.MessageSecurityVersion       = MessageSecurityVersion.WSSecurity11WSTrustFebruary2005WSSecureConversationFebruary2005WSSecurityPolicy11BasicSecurityProfile10;
                m_security.RequireSignatureConfirmation = false;
                m_security.SecurityHeaderLayout         = SecurityHeaderLayout.Strict;

                m_security.SetKeyDerivation(true);
            }

            m_encoding = new BinaryMessageEncodingBindingElement();

            // WCF does not distinguish between arrays and byte string.
            int maxArrayLength = configuration.MaxArrayLength;

            if (configuration.MaxArrayLength < configuration.MaxByteStringLength)
            {
                maxArrayLength = configuration.MaxByteStringLength;
            }

            m_encoding.ReaderQuotas.MaxArrayLength         = maxArrayLength;
            m_encoding.ReaderQuotas.MaxStringContentLength = configuration.MaxStringLength;
            m_encoding.ReaderQuotas.MaxBytesPerRead        = Int32.MaxValue;
            m_encoding.ReaderQuotas.MaxDepth = Int32.MaxValue;
            m_encoding.ReaderQuotas.MaxNameTableCharCount = Int32.MaxValue;

            m_transport = new System.ServiceModel.Channels.NamedPipeTransportBindingElement();

            m_transport.ManualAddressing       = false;
            m_transport.MaxBufferPoolSize      = Int32.MaxValue;
            m_transport.MaxReceivedMessageSize = configuration.MaxMessageSize;
        }
コード例 #4
0
 protected NamedPipeTransportBindingElement(NamedPipeTransportBindingElement elementToBeCloned) : base(elementToBeCloned)
 {
     this.connectionPoolSettings = new NamedPipeConnectionPoolSettings();
     if (elementToBeCloned.allowedUsers != null)
     {
         this.allowedUsers = new List <SecurityIdentifier>(elementToBeCloned.AllowedUsers.Count);
         foreach (SecurityIdentifier identifier in elementToBeCloned.allowedUsers)
         {
             this.allowedUsers.Add(identifier);
         }
     }
     this.connectionPoolSettings = elementToBeCloned.connectionPoolSettings.Clone();
 }
コード例 #5
0
        protected NamedPipeTransportBindingElement(NamedPipeTransportBindingElement elementToBeCloned)
            : base(elementToBeCloned)
        {
            if (elementToBeCloned.allowedUsers != null)
            {
                foreach (SecurityIdentifier id in elementToBeCloned.allowedUsers)
                {
                    this.allowedUsers.Add(id);
                }
            }

            this.connectionPoolSettings = elementToBeCloned.connectionPoolSettings.Clone();
            this.settings = elementToBeCloned.settings.Clone();
        }
コード例 #6
0
            private void CreateControlProxy()
            {
                EndpointAddress remoteAddress            = new EndpointAddress(System.ServiceModel.Activation.Utility.FormatListenerEndpoint(this.serviceName, this.listenerEndPoint), new AddressHeader[0]);
                NamedPipeTransportBindingElement element = new NamedPipeTransportBindingElement();
                CustomBinding   binding                      = new CustomBinding(new BindingElement[] { element });
                InstanceContext callbackInstance             = new InstanceContext(null, this, false);
                ChannelFactory <IConnectionRegister> factory = new DuplexChannelFactory <IConnectionRegister>(callbackInstance, binding, remoteAddress);

                factory.Endpoint.Behaviors.Add(new SharedListenerProxyBehavior(this));
                IConnectionRegister register = factory.CreateChannel();

                this.channelFactory             = factory;
                this.controlSessionWithListener = register as IDuplexContextChannel;
            }
コード例 #7
0
        public NamedPipeChannelFactory(NamedPipeTransportBindingElement source, BindingContext ctx)
        {
            foreach (BindingElement be in ctx.RemainingBindingElements)
            {
                MessageEncodingBindingElement mbe = be as MessageEncodingBindingElement;
                if (mbe != null)
                {
                    encoder = CreateEncoder <TChannel> (mbe);
                    quotas  = mbe.GetProperty <XmlDictionaryReaderQuotas> (ctx);
                    break;
                }
            }
            if (encoder == null)
            {
                encoder = new BinaryMessageEncoder();
            }

            this.source = source;
        }
コード例 #8
0
        static TransportBindingElement CreateTransportBindingElements(string transportUri, PolicyConversionContext policyContext)
        {
            TransportBindingElement transportBindingElement = null;

            // Try and Create TransportBindingElement
            switch (transportUri)
            {
            case TransportPolicyConstants.HttpTransportUri:
                transportBindingElement = GetHttpTransportBindingElement(policyContext);
                break;

            case TransportPolicyConstants.TcpTransportUri:
                transportBindingElement = new TcpTransportBindingElement();
                break;

            case TransportPolicyConstants.NamedPipeTransportUri:
                transportBindingElement = new NamedPipeTransportBindingElement();
                break;

            case TransportPolicyConstants.MsmqTransportUri:
                transportBindingElement = new MsmqTransportBindingElement();
                break;

            case TransportPolicyConstants.PeerTransportUri:
#pragma warning disable 0618
                transportBindingElement = new PeerTransportBindingElement();
#pragma warning restore 0618
                break;

            case TransportPolicyConstants.WebSocketTransportUri:
                HttpTransportBindingElement httpTransport = GetHttpTransportBindingElement(policyContext);
                httpTransport.WebSocketSettings.TransportUsage = WebSocketTransportUsage.Always;
                httpTransport.WebSocketSettings.SubProtocol    = WebSocketTransportSettings.SoapSubProtocol;
                transportBindingElement = httpTransport;
                break;

            default:
                // There may be another registered converter that can handle this transport.
                break;
            }

            return(transportBindingElement);
        }
コード例 #9
0
        public NamedPipeChannelListener(NamedPipeTransportBindingElement source, BindingContext context)
            : base(context)
        {
            foreach (BindingElement be in context.Binding.Elements)
            {
                MessageEncodingBindingElement mbe = be as MessageEncodingBindingElement;
                if (mbe != null)
                {
                    MessageEncoder = CreateEncoder <TChannel> (mbe);
                    quotas         = mbe.GetProperty <XmlDictionaryReaderQuotas> (context);
                    break;
                }
            }

            if (MessageEncoder == null)
            {
                MessageEncoder = new BinaryMessageEncoder();
            }
        }
コード例 #10
0
 protected NamedPipeTransportBindingElement(
     NamedPipeTransportBindingElement elementToBeCloned)
     : base(elementToBeCloned)
 {
     pool.CopyPropertiesFrom(elementToBeCloned.pool);
 }
コード例 #11
0
 protected NamedPipeTransportBindingElement(
     NamedPipeTransportBindingElement other)
     : base(other)
 {
     pool.CopyPropertiesFrom(other.pool);
 }
コード例 #12
0
 protected NamedPipeTransportBindingElement(NamedPipeTransportBindingElement elementToBeCloned)
     : base(elementToBeCloned)
 {
     _settings = elementToBeCloned._settings.Clone();
 }
コード例 #13
0
 protected NamedPipeChannelListener(NamedPipeTransportBindingElement bindingElement, BindingContext context) : base(bindingElement, context)
 {
     base.SetIdleTimeout(bindingElement.ConnectionPoolSettings.IdleTimeout);
     base.SetMaxPooledConnections(bindingElement.ConnectionPoolSettings.MaxOutboundConnectionsPerEndpoint);
 }
コード例 #14
0
 protected NamedPipeChannelListener(NamedPipeTransportBindingElement bindingElement, BindingContext context) : base(bindingElement, context)
 {
 }
コード例 #15
0
 public NamedPipeDuplexChannelListener(NamedPipeTransportBindingElement bindingElement, BindingContext context) : base(bindingElement, context)
 {
     this.duplexAcceptor = new InputQueueChannelAcceptor <IDuplexSessionChannel>(this);
 }
 public NamedPipeReplyChannelListener(NamedPipeTransportBindingElement bindingElement, BindingContext context) : base(bindingElement, context)
 {
     this.replyAcceptor = new ConnectionOrientedTransportChannelListener.ConnectionOrientedTransportReplyChannelAcceptor(this);
 }
コード例 #17
0
 public NamedPipeChannelFactory(NamedPipeTransportBindingElement bindingElement, BindingContext context) : base(bindingElement, context, bindingElement.ConnectionPoolSettings.GroupName, bindingElement.ConnectionPoolSettings.IdleTimeout, bindingElement.ConnectionPoolSettings.MaxOutboundConnectionsPerEndpoint, false)
 {
 }