Example #1
0
        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);
        }
Example #2
0
        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);
        }
Example #3
0
        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);
        }
Example #4
0
        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));
        }