public override bool CanBuildChannelFactory <TChannel>(BindingContext context)
        {
            if (context == null)
            {
                throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("context");
            }

            if (typeof(TChannel) != typeof(IOutputChannel))
            {
                return(false);
            }

            // we can convert IDuplexChannel
            if (context.CanBuildInnerChannelFactory <IDuplexChannel>())
            {
                return(true);
            }

            // we can convert IDuplexSessionChannel
            if (context.CanBuildInnerChannelFactory <IDuplexSessionChannel>())
            {
                return(true);
            }

            // and also IRequestChannel
            if (context.CanBuildInnerChannelFactory <IRequestChannel>())
            {
                return(true);
            }

            return(false);
        }
        public override IChannelFactory <TChannel> BuildChannelFactory <TChannel>(BindingContext context)
        {
            if (context == null)
            {
                throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("context");
            }

            if (typeof(TChannel) != typeof(IOutputChannel))
            {
                throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgument("TChannel",
                                                                             SR.GetString(SR.ChannelTypeNotSupported, typeof(TChannel)));
            }

            // Prefer IDuplexChannel
            if (context.CanBuildInnerChannelFactory <IDuplexChannel>())
            {
                return((IChannelFactory <TChannel>)(object) new DuplexOneWayChannelFactory(this, context));
            }

            // Prefer IDuplexSessionChannel
            if (context.CanBuildInnerChannelFactory <IDuplexSessionChannel>())
            {
                return((IChannelFactory <TChannel>)(object) new DuplexSessionOneWayChannelFactory(this, context));
            }

            // Followed by IRequestChannel
            if (context.CanBuildInnerChannelFactory <IRequestChannel>())
            {
                return((IChannelFactory <TChannel>)(object) new RequestOneWayChannelFactory(this, context));
            }

            throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(
#pragma warning suppress 56506 // context.Binding will never be null.
                      new InvalidOperationException(SR.GetString(SR.OneWayInternalTypeNotSupported, context.Binding.Name)));
        }
        public override bool CanBuildChannelFactory <TChannel>(BindingContext context)
        {
            if (context == null)
            {
                throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull(nameof(context));
            }

            if (typeof(TChannel) == typeof(IOutputSessionChannel))
            {
                return(context.CanBuildInnerChannelFactory <IRequestSessionChannel>() ||
                       context.CanBuildInnerChannelFactory <IRequestChannel>() ||
                       context.CanBuildInnerChannelFactory <IDuplexSessionChannel>() ||
                       context.CanBuildInnerChannelFactory <IDuplexChannel>());
            }
            else if (typeof(TChannel) == typeof(IDuplexSessionChannel))
            {
                return(context.CanBuildInnerChannelFactory <IDuplexSessionChannel>() ||
                       context.CanBuildInnerChannelFactory <IDuplexChannel>());
            }
            else if (typeof(TChannel) == typeof(IRequestSessionChannel))
            {
                return(context.CanBuildInnerChannelFactory <IRequestSessionChannel>() ||
                       context.CanBuildInnerChannelFactory <IRequestChannel>());
            }

            return(false);
        }
        public override bool CanBuildChannelFactory <TChannel>(BindingContext context)
        {
            if (context == null)
            {
                throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("context");
            }

            InternalDuplexBindingElement.AddDuplexFactorySupport(context, ref this.internalDuplexBindingElement);

            if (typeof(TChannel) == typeof(IOutputSessionChannel))
            {
                return(context.CanBuildInnerChannelFactory <IRequestSessionChannel>() ||
                       context.CanBuildInnerChannelFactory <IRequestChannel>() ||
                       context.CanBuildInnerChannelFactory <IDuplexSessionChannel>() ||
                       context.CanBuildInnerChannelFactory <IDuplexChannel>());
            }
            else if (typeof(TChannel) == typeof(IDuplexSessionChannel))
            {
                return(context.CanBuildInnerChannelFactory <IDuplexSessionChannel>() ||
                       context.CanBuildInnerChannelFactory <IDuplexChannel>());
            }
            else if (typeof(TChannel) == typeof(IRequestSessionChannel))
            {
                return(context.CanBuildInnerChannelFactory <IRequestSessionChannel>() ||
                       context.CanBuildInnerChannelFactory <IRequestChannel>());
            }

            return(false);
        }
        public override bool CanBuildChannelFactory <TChannel> (BindingContext context)
        {
#if MOBILE || XAMMAC_4_5
            // not sure this should be like this, but there isn't Symmetric/Asymmetric elements in 2.1 anyways.
            return(context.CanBuildInnerChannelFactory <TChannel> ());
#else
            if (this is TransportSecurityBindingElement)
            {
                throw new NotImplementedException();
            }

            var symm  = this as SymmetricSecurityBindingElement;
            var asymm = this as AsymmetricSecurityBindingElement;
            var pt    = symm != null ? symm.ProtectionTokenParameters : asymm != null ? asymm.InitiatorTokenParameters : null;
            if (pt == null)
            {
                return(false);
            }

            var t   = typeof(TChannel);
            var req = new InitiatorServiceModelSecurityTokenRequirement();
            pt.InitializeSecurityTokenRequirement(req);
            object dummy;
            if (req.Properties.TryGetValue(ServiceModelSecurityTokenRequirement.IssuedSecurityTokenParametersProperty, out dummy) && dummy != null)
            {
                if (t == typeof(IRequestSessionChannel))
                {
                    return(context.CanBuildInnerChannelFactory <IRequestChannel> () ||
                           context.CanBuildInnerChannelFactory <IRequestSessionChannel> ());
                }
                else if (t == typeof(IDuplexSessionChannel))
                {
                    return(context.CanBuildInnerChannelFactory <IDuplexChannel> () ||
                           context.CanBuildInnerChannelFactory <IDuplexSessionChannel> ());
                }
            }
            else
            {
                if (t == typeof(IRequestChannel))
                {
                    return(context.CanBuildInnerChannelFactory <IRequestChannel> () ||
                           context.CanBuildInnerChannelFactory <IRequestSessionChannel> ());
                }
                else if (t == typeof(IDuplexChannel))
                {
                    return(context.CanBuildInnerChannelFactory <IDuplexChannel> () ||
                           context.CanBuildInnerChannelFactory <IDuplexSessionChannel> ());
                }
            }
            return(false);
#endif
        }
Exemple #6
0
 public override bool CanBuildChannelListener <TChannel>(BindingContext context) where TChannel : class, IChannel
 {
     if (context == null)
     {
         throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("context");
     }
     return(((typeof(TChannel) == typeof(IDuplexChannel)) && context.CanBuildInnerChannelFactory <IOutputChannel>()) && context.CanBuildInnerChannelListener <IInputChannel>());
 }
 public override bool CanBuildChannelFactory <TChannel>(BindingContext context)
 {
     if (context == null)
     {
         throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("context");
     }
     return(context.CanBuildInnerChannelFactory <TChannel>());
 }
 internal bool InternalCanBuildChannelFactory <TChannel>(BindingContext context)
 {
     if (context == null)
     {
         throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentNullException("context"));
     }
     context.BindingParameters.Add(this);
     return(context.CanBuildInnerChannelFactory <TChannel>());
 }
Exemple #9
0
        public override bool CanBuildChannelFactory <TChannel>(BindingContext context)
        {
            if (context == null)
            {
                throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull(nameof(context));
            }

            context.BindingParameters.Add(this);
            return(context.CanBuildInnerChannelFactory <TChannel>());
        }
Exemple #10
0
 public override bool CanBuildChannelFactory <TChannel>(BindingContext context)
 {
     if (context == null)
     {
         throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentNullException("context"));
     }
     this.credentials = context.BindingParameters.Find <ClientCredentials>();
     context.BindingParameters.Add(this);
     return(context.CanBuildInnerChannelFactory <TChannel>());
 }
Exemple #11
0
 public override IChannelFactory <TChannel> BuildChannelFactory <TChannel>(BindingContext context)
 {
     if (context == null)
     {
         throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("context");
     }
     this.VerifyTransportMode(context);
     this.SetSecuritySettings(context);
     InternalDuplexBindingElement.AddDuplexFactorySupport(context, ref this.internalDuplexBindingElement);
     if (typeof(TChannel) == typeof(IOutputSessionChannel))
     {
         if (context.CanBuildInnerChannelFactory <IRequestSessionChannel>())
         {
             return((IChannelFactory <TChannel>) new ReliableChannelFactory <TChannel, IRequestSessionChannel>(this, context.BuildInnerChannelFactory <IRequestSessionChannel>(), context.Binding));
         }
         if (context.CanBuildInnerChannelFactory <IRequestChannel>())
         {
             return((IChannelFactory <TChannel>) new ReliableChannelFactory <TChannel, IRequestChannel>(this, context.BuildInnerChannelFactory <IRequestChannel>(), context.Binding));
         }
         if (context.CanBuildInnerChannelFactory <IDuplexSessionChannel>())
         {
             return((IChannelFactory <TChannel>) new ReliableChannelFactory <TChannel, IDuplexSessionChannel>(this, context.BuildInnerChannelFactory <IDuplexSessionChannel>(), context.Binding));
         }
         if (context.CanBuildInnerChannelFactory <IDuplexChannel>())
         {
             return((IChannelFactory <TChannel>) new ReliableChannelFactory <TChannel, IDuplexChannel>(this, context.BuildInnerChannelFactory <IDuplexChannel>(), context.Binding));
         }
     }
     else if (typeof(TChannel) == typeof(IDuplexSessionChannel))
     {
         if (context.CanBuildInnerChannelFactory <IDuplexSessionChannel>())
         {
             return((IChannelFactory <TChannel>) new ReliableChannelFactory <TChannel, IDuplexSessionChannel>(this, context.BuildInnerChannelFactory <IDuplexSessionChannel>(), context.Binding));
         }
         if (context.CanBuildInnerChannelFactory <IDuplexChannel>())
         {
             return((IChannelFactory <TChannel>) new ReliableChannelFactory <TChannel, IDuplexChannel>(this, context.BuildInnerChannelFactory <IDuplexChannel>(), context.Binding));
         }
     }
     else if (typeof(TChannel) == typeof(IRequestSessionChannel))
     {
         if (context.CanBuildInnerChannelFactory <IRequestSessionChannel>())
         {
             return((IChannelFactory <TChannel>) new ReliableChannelFactory <TChannel, IRequestSessionChannel>(this, context.BuildInnerChannelFactory <IRequestSessionChannel>(), context.Binding));
         }
         if (context.CanBuildInnerChannelFactory <IRequestChannel>())
         {
             return((IChannelFactory <TChannel>) new ReliableChannelFactory <TChannel, IRequestChannel>(this, context.BuildInnerChannelFactory <IRequestChannel>(), context.Binding));
         }
     }
     throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgument("TChannel", System.ServiceModel.SR.GetString("ChannelTypeNotSupported", new object[] { typeof(TChannel) }));
 }
        internal bool InternalCanBuildChannelFactory <TChannel>(BindingContext context)
        {
            if (context == null)
            {
                throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentNullException("context"));
            }

#pragma warning suppress 56506 // [....], BindingContext.BindingParameters never be null
            context.BindingParameters.Add(this);
            return(context.CanBuildInnerChannelFactory <TChannel>());
        }
        public override bool CanBuildChannelFactory <TChannel>(BindingContext context)
        {
            if (context == null)
            {
                throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("context");
            }

#pragma warning suppress 56506 // Microsoft, BindingContext.BindingParameters cannot be null
            context.BindingParameters.Add(this);
            return(context.CanBuildInnerChannelFactory <TChannel>());
        }
Exemple #14
0
 public static void AddDuplexFactorySupport(BindingContext context, ref InternalDuplexBindingElement internalDuplexBindingElement)
 {
     if ((((((!context.CanBuildInnerChannelFactory <IDuplexChannel>() && (context.RemainingBindingElements.Find <CompositeDuplexBindingElement>() != null)) && (context.CanBuildInnerChannelFactory <IOutputChannel>() && context.CanBuildInnerChannelListener <IInputChannel>())) && !context.CanBuildInnerChannelFactory <IRequestChannel>()) && !context.CanBuildInnerChannelFactory <IRequestSessionChannel>()) && !context.CanBuildInnerChannelFactory <IOutputSessionChannel>()) && !context.CanBuildInnerChannelFactory <IDuplexSessionChannel>())
     {
         if (internalDuplexBindingElement == null)
         {
             internalDuplexBindingElement = new InternalDuplexBindingElement();
         }
         context.RemainingBindingElements.Insert(0, internalDuplexBindingElement);
     }
 }
 public override bool CanBuildChannelFactory <TChannel>(BindingContext context)
 {
     if (context == null)
     {
         throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentNullException("context"));
     }
     if (((!(typeof(TChannel) == typeof(IOutputChannel)) && !(typeof(TChannel) == typeof(IDuplexChannel))) && (!(typeof(TChannel) == typeof(IRequestChannel)) && !(typeof(TChannel) == typeof(IOutputSessionChannel)))) && (!(typeof(TChannel) == typeof(IRequestSessionChannel)) && !(typeof(TChannel) == typeof(IDuplexSessionChannel))))
     {
         return(false);
     }
     return(context.CanBuildInnerChannelFactory <TChannel>());
 }
Exemple #16
0
 public override bool CanBuildChannelFactory <TChannel>(BindingContext context)
 {
     if (context == null)
     {
         throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("context");
     }
     if ((!(typeof(TChannel) == typeof(IOutputChannel)) && !(typeof(TChannel) == typeof(IOutputSessionChannel))) && ((!(typeof(TChannel) == typeof(IRequestChannel)) && !(typeof(TChannel) == typeof(IRequestSessionChannel))) && (!(typeof(TChannel) == typeof(IDuplexSessionChannel)) || (this.ContextExchangeMechanism == System.ServiceModel.Channels.ContextExchangeMechanism.HttpCookie))))
     {
         return(false);
     }
     return(context.CanBuildInnerChannelFactory <TChannel>());
 }
Exemple #17
0
        public override bool CanBuildChannelFactory <TChannel>(BindingContext context)
        {
            if (context == null)
            {
                throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("context");
            }

            return((typeof(TChannel) == typeof(IOutputChannel) ||
                    typeof(TChannel) == typeof(IOutputSessionChannel) ||
                    typeof(TChannel) == typeof(IRequestChannel) ||
                    typeof(TChannel) == typeof(IRequestSessionChannel) ||
                    (typeof(TChannel) == typeof(IDuplexSessionChannel) && this.ContextExchangeMechanism != ContextExchangeMechanism.HttpCookie)) &&
                   context.CanBuildInnerChannelFactory <TChannel>());
        }
 public override IChannelFactory <TChannel> BuildChannelFactory <TChannel>(BindingContext context)
 {
     if (context == null)
     {
         throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("context");
     }
     if (typeof(TChannel) != typeof(IOutputChannel))
     {
         throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgument("TChannel", System.ServiceModel.SR.GetString("ChannelTypeNotSupported", new object[] { typeof(TChannel) }));
     }
     if (context.CanBuildInnerChannelFactory <IDuplexChannel>())
     {
         return((IChannelFactory <TChannel>) new DuplexOneWayChannelFactory(this, context));
     }
     if (context.CanBuildInnerChannelFactory <IDuplexSessionChannel>())
     {
         return((IChannelFactory <TChannel>) new DuplexSessionOneWayChannelFactory(this, context));
     }
     if (!context.CanBuildInnerChannelFactory <IRequestChannel>())
     {
         throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new InvalidOperationException(System.ServiceModel.SR.GetString("OneWayInternalTypeNotSupported", new object[] { context.Binding.Name })));
     }
     return((IChannelFactory <TChannel>) new RequestOneWayChannelFactory(this, context));
 }
        public override bool CanBuildChannelFactory <TChannel>(BindingContext context)
        {
            if (context == null)
            {
                throw FxTrace.Exception.ArgumentNull("context");
            }


            Type typeofTChannel = typeof(TChannel);

            if (typeofTChannel == typeof(IDuplexChannel) ||
                typeofTChannel == typeof(IDuplexSessionChannel) ||
                typeofTChannel == typeof(IRequestChannel) ||
                typeofTChannel == typeof(IRequestSessionChannel) ||
                typeofTChannel == typeof(IOutputChannel) ||
                typeofTChannel == typeof(IOutputSessionChannel))
            {
                return(context.CanBuildInnerChannelFactory <TChannel>());
            }
            return(false);
        }
        public override bool CanBuildChannelFactory <TChannel>(BindingContext context)
        {
            if (context == null)
            {
                throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull(nameof(context));
            }

            if (SessionMode)
            {
                return(CanBuildSessionChannelFactory <TChannel>(context));
            }

            if (!context.CanBuildInnerChannelFactory <TChannel>())
            {
                return(false);
            }

            return(typeof(TChannel) == typeof(IOutputChannel) || typeof(TChannel) == typeof(IOutputSessionChannel) ||
                   (SupportsDuplex && (typeof(TChannel) == typeof(IDuplexChannel) || typeof(TChannel) == typeof(IDuplexSessionChannel))) ||
                   (SupportsRequestReply && (typeof(TChannel) == typeof(IRequestChannel) || typeof(TChannel) == typeof(IRequestSessionChannel))));
        }
        private bool CanBuildSessionChannelFactory <TChannel>(BindingContext context)
        {
            if (!(context.CanBuildInnerChannelFactory <IRequestChannel>() ||
                  context.CanBuildInnerChannelFactory <IRequestSessionChannel>() ||
                  context.CanBuildInnerChannelFactory <IDuplexChannel>() ||
                  context.CanBuildInnerChannelFactory <IDuplexSessionChannel>()))
            {
                return(false);
            }

            if (typeof(TChannel) == typeof(IRequestSessionChannel))
            {
                return(context.CanBuildInnerChannelFactory <IRequestChannel>() || context.CanBuildInnerChannelFactory <IRequestSessionChannel>());
            }
            else if (typeof(TChannel) == typeof(IDuplexSessionChannel))
            {
                return(context.CanBuildInnerChannelFactory <IDuplexChannel>() || context.CanBuildInnerChannelFactory <IDuplexSessionChannel>());
            }
            else
            {
                return(false);
            }
        }
Exemple #22
0
 public override bool CanBuildChannelFactory <TChannel> (BindingContext context)
 {
     return(context.CanBuildInnerChannelFactory <TChannel> ());
 }
Exemple #23
0
 public virtual bool CanBuildChannelFactory <TChannel> (
     BindingContext context)
 {
     return(context.CanBuildInnerChannelFactory <TChannel> ());
 }
        public override IChannelFactory <TChannel> BuildChannelFactory <TChannel>(BindingContext context)
        {
            if (context == null)
            {
                throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull(nameof(context));
            }

            VerifyTransportMode(context);

            if (typeof(TChannel) == typeof(IOutputSessionChannel))
            {
                if (context.CanBuildInnerChannelFactory <IRequestSessionChannel>())
                {
                    return((IChannelFactory <TChannel>)(object)
                           new ReliableChannelFactory <TChannel, IRequestSessionChannel>(
                               this, context.BuildInnerChannelFactory <IRequestSessionChannel>(), context.Binding));
                }
                else if (context.CanBuildInnerChannelFactory <IRequestChannel>())
                {
                    return((IChannelFactory <TChannel>)(object)
                           new ReliableChannelFactory <TChannel, IRequestChannel>(
                               this, context.BuildInnerChannelFactory <IRequestChannel>(), context.Binding));
                }
                else if (context.CanBuildInnerChannelFactory <IDuplexSessionChannel>())
                {
                    return((IChannelFactory <TChannel>)(object)
                           new ReliableChannelFactory <TChannel, IDuplexSessionChannel>(
                               this, context.BuildInnerChannelFactory <IDuplexSessionChannel>(), context.Binding));
                }
                else if (context.CanBuildInnerChannelFactory <IDuplexChannel>())
                {
                    return((IChannelFactory <TChannel>)(object)
                           new ReliableChannelFactory <TChannel, IDuplexChannel>(
                               this, context.BuildInnerChannelFactory <IDuplexChannel>(), context.Binding));
                }
            }
            else if (typeof(TChannel) == typeof(IDuplexSessionChannel))
            {
                if (context.CanBuildInnerChannelFactory <IDuplexSessionChannel>())
                {
                    return((IChannelFactory <TChannel>)(object)
                           new ReliableChannelFactory <TChannel, IDuplexSessionChannel>(
                               this, context.BuildInnerChannelFactory <IDuplexSessionChannel>(), context.Binding));
                }
                else if (context.CanBuildInnerChannelFactory <IDuplexChannel>())
                {
                    return((IChannelFactory <TChannel>)(object)
                           new ReliableChannelFactory <TChannel, IDuplexChannel>(
                               this, context.BuildInnerChannelFactory <IDuplexChannel>(), context.Binding));
                }
            }
            else if (typeof(TChannel) == typeof(IRequestSessionChannel))
            {
                if (context.CanBuildInnerChannelFactory <IRequestSessionChannel>())
                {
                    return((IChannelFactory <TChannel>)(object)
                           new ReliableChannelFactory <TChannel, IRequestSessionChannel>(
                               this, context.BuildInnerChannelFactory <IRequestSessionChannel>(), context.Binding));
                }
                else if (context.CanBuildInnerChannelFactory <IRequestChannel>())
                {
                    return((IChannelFactory <TChannel>)(object)
                           new ReliableChannelFactory <TChannel, IRequestChannel>(
                               this, context.BuildInnerChannelFactory <IRequestChannel>(), context.Binding));
                }
            }

            throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgument("TChannel", SR.Format(SR.ChannelTypeNotSupported, typeof(TChannel)));
        }
Exemple #25
0
        public virtual bool CanBuildChannelFactory <TChannel>(BindingParameterCollection parameters)
        {
            BindingContext context = new BindingContext(new CustomBinding(this), parameters);

            return(context.CanBuildInnerChannelFactory <TChannel>());
        }