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); }
/// <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); }