public static List <IServiceBehavior> GetDefaultSeviceBehaviors(string scheme) { List <IServiceBehavior> list = new List <IServiceBehavior>(); WCFConfigProvider.InitServiceModel(); if (WCFConfigProvider._serviceModel == null) { return(list); } string defaultServiceBehaviorName = WCFConfigProvider.GetDefaultServiceBehaviorName(scheme); if (WCFConfigProvider._serviceModel.Behaviors.ServiceBehaviors.ContainsKey(defaultServiceBehaviorName)) { ServiceBehaviorElement serviceBehaviorElement = WCFConfigProvider._serviceModel.Behaviors.ServiceBehaviors[defaultServiceBehaviorName]; foreach (BehaviorExtensionElement current in serviceBehaviorElement) { IServiceBehavior serviceBehavior = WCFConfigProvider.CreateBehavior <IServiceBehavior>(current); if (serviceBehavior != null) { list.Add(serviceBehavior); } } } return(list); }
public static string GetBaseAddressByContractType(Type contractType, string key = "") { WCFConfigProvider.InitClientConfigs(); WCFServiceConfig wCFServiceConfig; if (!string.IsNullOrEmpty(key)) { if (WCFConfigProvider._clientConfigs.TryGetValue(key, out wCFServiceConfig)) { throw new Exception(string.Format("key:{0} is not exists in wcfservice config.", key)); } } else { wCFServiceConfig = ( from p in WCFConfigProvider._clientConfigs.Values where p.Assembly == contractType.Assembly.GetName().Name select p).FirstOrDefault <WCFServiceConfig>(); } if (wCFServiceConfig != null) { return(Path.Combine(wCFServiceConfig.BaseAddress, wCFServiceConfig.Key)); } return(null); }
public static Binding GetDefaultBinding(string scheme) { WCFConfigProvider.InitServiceModel(); if (WCFConfigProvider._serviceModel == null) { return(null); } ProtocolMappingElement protocolMappingElement = WCFConfigProvider._serviceModel.ProtocolMapping.ProtocolMappingCollection[scheme]; if (protocolMappingElement != null) { string binding = protocolMappingElement.Binding; string bindingConfiguration = protocolMappingElement.BindingConfiguration; string a; if ((a = binding.ToLower()) != null) { if (a == "nettcpbinding") { return(new NetTcpBinding(bindingConfiguration)); } if (a == "basichttpbinding") { return(new BasicHttpBinding(bindingConfiguration)); } if (a == "wshttpbinding") { return(new WSHttpBinding(bindingConfiguration)); } } } return(null); }
private ChannelFactory <T> Create <T>(Type contractType, string configKey, Uri uri = null) { if (uri == null) { string baseAddressByContractType = WCFConfigProvider.GetBaseAddressByContractType(contractType, configKey); uri = new Uri(Path.Combine(baseAddressByContractType, contractType.FullName)); } Binding defaultBinding = WCFConfigProvider.GetDefaultBinding(uri.Scheme); ContractDescription contract = ContractDescription.GetContract(contractType); ServiceEndpoint serviceEndpoint = new ServiceEndpoint(contract, defaultBinding, new EndpointAddress(uri.OriginalString)); WCFConfigProvider.GetDefaultEndPointBehaviors(uri.Scheme).ForEach(delegate(IEndpointBehavior behavior) { if (serviceEndpoint.Behaviors.Contains(behavior.GetType())) { serviceEndpoint.Behaviors.Remove(behavior.GetType()); } serviceEndpoint.Behaviors.Add(behavior); } ); return(new ChannelFactory <T>(serviceEndpoint)); }