/// <summary> /// Verifica se na configuração existe o endereço com o nome informado. /// </summary> /// <param name="addressName">Nome do endereço</param> /// <param name="servicesContext">Contexto dos serviços.</param> /// <param name="useAddressProvider">Identifica se é para verifica pelo AddressProvider</param> /// <returns></returns> public bool Contains(string addressName, string servicesContext, bool useAddressProvider) { var key = new ServiceAddressKey(addressName, servicesContext); lock (_serviceAddress) if (_serviceAddress.ContainsKey(key)) { return(true); } if (!useAddressProvider) { return(false); } var addressProvider = GetServiceAddressProvider(); if (addressProvider != null) { var addresses = addressProvider.GetServiceAddresses(addressName, servicesContext); if (addresses != null && addresses.Length > 0) { Add(addresses[new Random().Next(0, addresses.Length - 1)], servicesContext); return(true); } } return(false); }
/// <summary> /// Recupera o endereço pelo nome informado. /// </summary> /// <param name="addressName"></param> /// <param name="servicesContext">Contexto de serviços.</param> /// <returns></returns> private ServiceAddress Get(string addressName, string servicesContext) { ServicesConfigurationEntry result = null; var key = new ServiceAddressKey(addressName, servicesContext); lock (_serviceAddress) if (_serviceAddress.TryGetValue(key, out result)) { return(result.Address); } var addressProvider = GetServiceAddressProvider(); if (addressName == addressProvider.ProviderAddressName) { throw new InvalidOperationException(ResourceMessageFormatter.Create(() => Properties.Resources.ImpossibleRecoverAddressProviderAddress, addressName).Format()); } if (addressProvider != null) { var addresses = addressProvider.GetServiceAddresses(addressName, servicesContext); if (addresses != null && addresses.Length > 0) { Add(addresses[new Random().Next(0, addresses.Length - 1)], servicesContext); } else { throw new ServiceConfigurationException(string.Format(Properties.Resources.ServiceConfiguration_AddressNotFoundInAddressProvider, addressName, servicesContext)); } lock (_serviceAddress) if (_serviceAddress.TryGetValue(key, out result)) { return(result.Address); } } throw new ServiceConfigurationException(string.Format(Properties.Resources.ServiceConfiguration_AddressNotFound, addressName)); }
/// <summary> /// Remove o endereço da configuração. /// </summary> /// <param name="addressName">Nome do endereço registrado.</param> /// <param name="servicesContext">Contexto de serviços.</param> /// <returns>True caso o endereço tenha sido removido com sucesso.</returns> public bool Remove(string addressName, string servicesContext) { var key = new ServiceAddressKey(addressName, servicesContext); ServicesConfigurationEntry entry = null; var contains = false; lock (_serviceAddress) if (_serviceAddress.TryGetValue(key, out entry)) { _serviceAddress.Remove(key); } if (contains) { OnRemoved(addressName, entry); } return(contains); }
/// <summary> /// Adiciona um novo endereço de serviço para a configuração do sistema. /// </summary> /// <param name="address">Endereço que será adicionado.</param> /// <param name="servicesContext">Contexto de serviços associado.</param> /// <param name="ignoreReset">Identifica se é para ignorar o reset do endereço.</param> /// <returns></returns> public bool Add(ServiceAddress address, string servicesContext, bool ignoreReset) { address.Require("address").NotNull(); var key = new ServiceAddressKey(address.Name, servicesContext, ignoreReset); ServicesConfigurationEntry entry = null; lock (_serviceAddress) { if (_serviceAddress.ContainsKey(key)) { return(false); } entry = new ServicesConfigurationEntry(address, servicesContext); _serviceAddress.Add(key, entry); } OnAdded(address.Name, entry); return(true); }
/// <summary> /// Recupera o endereço do serviço pelo nome informado. /// </summary> /// <param name="addressName"></param> /// <param name="servicesContext"></param> /// <returns></returns> public ServiceAddress this[string addressName, string servicesContext] { get { return(Get(addressName, servicesContext)); } set { var key = new ServiceAddressKey(addressName, servicesContext); _serviceAddress.Remove(key); if (value != null) { var entry = new ServicesConfigurationEntry(value, this.ServicesContext); _serviceAddress.Add(key, entry); OnUpdated(addressName, entry); } } }
/// <summary> /// Atualiza os dados do endereço de serviço informado. /// </summary> /// <param name="address">Instacia do endereço que será atualizada.</param> /// <param name="servicesContext">Contexto de serviços.</param> /// <returns>True caso o endereço tenha sido atualizado.</returns> public bool Update(ServiceAddress address, string servicesContext) { address.Require("address").NotNull(); var key = new ServiceAddressKey(address.Name, servicesContext); ServicesConfigurationEntry entry = null; lock (_serviceAddress) { if (_serviceAddress.ContainsKey(key)) { _serviceAddress.Remove(key); entry = new ServicesConfigurationEntry(address, servicesContext); _serviceAddress.Add(key, entry); } } if (entry != null) { OnUpdated(key.Name, entry); return(true); } return(false); }