protected virtual void ApplyConfiguration(string endpointConfig) { if (endpointConfig == null) { return; } #if NET_2_1 try { // It should automatically use XmlXapResolver var cfg = new SilverlightClientConfigLoader().Load(XmlReader.Create("ServiceReferences.ClientConfig")); SilverlightClientConfigLoader.ServiceEndpointConfiguration se = null; if (endpointConfig == "*") { se = cfg.GetServiceEndpointConfiguration(Endpoint.Contract.Name); } if (se == null) { se = cfg.GetServiceEndpointConfiguration(endpointConfig); } if (se.Binding != null && Endpoint.Binding == null) { Endpoint.Binding = se.Binding; } else // ignore it { Console.WriteLine("WARNING: Configured binding not found in configuration {0}", endpointConfig); } if (se.Address != null && Endpoint.Address == null) { Endpoint.Address = se.Address; } else // ignore it { Console.WriteLine("WARNING: Configured endpoint address not found in configuration {0}", endpointConfig); } } catch (Exception) { // ignore it. Console.WriteLine("WARNING: failed to load endpoint configuration for {0}", endpointConfig); } #else string contractName = Endpoint.Contract.ConfigurationName; ClientSection client = ConfigUtil.ClientSection; ChannelEndpointElement res = null; foreach (ChannelEndpointElement el in client.Endpoints) { if (el.Contract == contractName && (endpointConfig == el.Name || endpointConfig == "*")) { if (res != null) { throw new InvalidOperationException(String.Format("More then one endpoint matching contract {0} was found.", contractName)); } res = el; } } if (res == null) { throw new InvalidOperationException(String.Format("Client endpoint configuration '{0}' was not found in {1} endpoints.", endpointConfig, client.Endpoints.Count)); } if (Endpoint.Binding == null) { Endpoint.Binding = ConfigUtil.CreateBinding(res.Binding, res.BindingConfiguration); } if (Endpoint.Address == null) { Endpoint.Address = new EndpointAddress(res.Address); } if (res.BehaviorConfiguration != "") { ApplyBehavior(res.BehaviorConfiguration); } #endif }
protected virtual void ApplyConfiguration(string endpointConfig) { if (endpointConfig == null) { return; } #if NET_2_1 || XAMMAC_4_5 try { // It should automatically use XmlXapResolver var cfg = new SilverlightClientConfigLoader().Load(XmlReader.Create("ServiceReferences.ClientConfig")); SilverlightClientConfigLoader.ServiceEndpointConfiguration se = null; if (endpointConfig == "*") { se = cfg.GetServiceEndpointConfiguration(Endpoint.Contract.Name); } if (se == null) { se = cfg.GetServiceEndpointConfiguration(endpointConfig); } if (se.Binding != null && Endpoint.Binding == null) { Endpoint.Binding = se.Binding; } else // ignore it { Console.WriteLine("WARNING: Configured binding not found in configuration {0}", endpointConfig); } if (se.Address != null && Endpoint.Address == null) { Endpoint.Address = se.Address; } else // ignore it { Console.WriteLine("WARNING: Configured endpoint address not found in configuration {0}", endpointConfig); } } catch (Exception) { // ignore it. Console.WriteLine("WARNING: failed to load endpoint configuration for {0}", endpointConfig); } #else string contractName = Endpoint.Contract.ConfigurationName; ClientSection client = ConfigUtil.ClientSection; ChannelEndpointElement endpoint = null; foreach (ChannelEndpointElement el in client.Endpoints) { if (el.Contract == contractName && (endpointConfig == el.Name || endpointConfig == "*")) { if (endpoint != null) { throw new InvalidOperationException(String.Format("More then one endpoint matching contract {0} was found.", contractName)); } endpoint = el; } } if (endpoint == null) { throw new InvalidOperationException(String.Format("Client endpoint configuration '{0}' was not found in {1} endpoints.", endpointConfig, client.Endpoints.Count)); } var binding = String.IsNullOrEmpty(endpoint.Binding) ? null : ConfigUtil.CreateBinding(endpoint.Binding, endpoint.BindingConfiguration); var contractType = ConfigUtil.GetTypeFromConfigString(endpoint.Contract, NamedConfigCategory.Contract); if (contractType == null) { throw new ArgumentException(String.Format("Contract '{0}' was not found", endpoint.Contract)); } var contract = String.IsNullOrEmpty(endpoint.Contract) ? Endpoint.Contract : ContractDescription.GetContract(contractType); if (!String.IsNullOrEmpty(endpoint.Kind)) { var se = ConfigUtil.ConfigureStandardEndpoint(contract, endpoint); if (se.Binding == null) { se.Binding = binding; } if (se.Address == null && se.Binding != null) // standard endpoint might have empty address { se.Address = new EndpointAddress(endpoint.Address); } if (se.Binding == null && se.Address != null) // look for protocol mapping { se.Binding = ConfigUtil.GetBindingByProtocolMapping(se.Address.Uri); } service_endpoint = se; } else { if (binding == null && endpoint.Address != null) // look for protocol mapping { Endpoint.Binding = ConfigUtil.GetBindingByProtocolMapping(endpoint.Address); } } if (Endpoint.Binding == null) { Endpoint.Binding = ConfigUtil.CreateBinding(endpoint.Binding, endpoint.BindingConfiguration); } if (Endpoint.Address == null) { Endpoint.Address = new EndpointAddress(endpoint.Address); } if (endpoint.BehaviorConfiguration != "") { ApplyBehavior(endpoint.BehaviorConfiguration); } #endif }