Пример #1
0
        private ChannelFactory <TServiceContract> GetChannelFactory <TServiceContract>(string relyingPartyUrl) where TServiceContract : class
        {
            var sf = serviceChannelFactoryCache.Get(typeof(TServiceContract).ToString());

            if (sf == null)
            {
                string WifEncryptionCertname = ConfigurationManager.AppSettings["WifEncryptionCertname"];
                var    rpUri = new Uri(relyingPartyUrl);
                var    serviceEndpointAddress  = new EndpointAddress(rpUri, EndpointIdentity.CreateDnsIdentity(WifEncryptionCertname), new AddressHeaderCollection());
                var    secureTransportRequired = rpUri.Scheme.ToLower().Equals("https");

                Binding binding = secureTransportRequired ? CreateIssuedTokenOverTransportBinding() : CreateWs2007FederationHttpBinding(true);

                var serviceChannelFactory = new ChannelFactory <TServiceContract>(binding, serviceEndpointAddress);
                if (serviceChannelFactory.Credentials != null)
                {
                    serviceChannelFactory.Credentials.SupportInteractive = false;
                    if (!secureTransportRequired)
                    {
                        serviceChannelFactory.Credentials.ServiceCertificate.DefaultCertificate = serviceCertificate;
                    }
                }

                //serviceChannelFactory.ConfigureChannelFactory();
                CacheClientCredentials.ConfigureChannelFactory <TServiceContract>(serviceChannelFactory);
                serviceChannelFactoryCache.Add(typeof(TServiceContract).ToString(), serviceChannelFactory, DateTimeOffset.Now.AddMinutes(10));
                return(serviceChannelFactory);
            }
            return((ChannelFactory <TServiceContract>)sf);
        }
Пример #2
0
        /// <summary>
        /// Replace any ClientCredential behavior
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="channelFactory"></param>
        public static void ConfigureChannelFactory <T>(ChannelFactory <T> channelFactory)
        {
            var other = channelFactory.Endpoint.Behaviors.Find <ClientCredentials>();

            if (other == null)
            {
                return;
            }

            channelFactory.Endpoint.Behaviors.Remove(other.GetType());
            var item = new CacheClientCredentials(other);

            channelFactory.Endpoint.Behaviors.Add(item);
        }