Vários métodos para chamar um serviço WCF
-
28-09-2019 - |
Pergunta
Eu tenho uma aula que lida com toda a interação no meu aplicativo com meu serviço WCF e parece que o MSDN diz que o uso do uso) _ A instrução com WCF é ruim - posso ver por que isso é ruim e concorda com isso (http:/ /sdn.microsoft.com/en-us/library/aa355056.aspx)
Meu problema é que o método de implementação sugerido significará que eu tenho 10 métodos [como 10 métodos públicos em meu serviço] que terão o mesmo código de estrutura e, obviamente, não segue o diretor seco - o código é semelhante ao seguinte :
try
{
results = _client.MethodCall(input parameteres);
_client.Close();
}
catch (CommunicationException)
{
if (_client != null && _client.State != CommunicationState.Closed)
{
_client.Abort();
}
}
catch (TimeoutException)
{
if (_client != null && _client.State != CommunicationState.Closed)
{
_client.Abort();
}
}
catch (Exception ex)
{
if (_client != null && _client.State != CommunicationState.Closed)
{
_client.Abort();
}
throw;
}
Isso ainda não tem nenhum registro, mas é claro que quando eu começar a logá, terei que adicionar o trabalho de madeira em quase 10 lugares diferentes
Alguém tem alguma dica sobre como posso ser um pouco mais engenhoso aqui ao reutilizar o código
obrigado
Paulo
Solução
Eu usaria um componente de manuseio de exceção configurável e de uso geral, que permite que o processamento básico de manuseio de exceções, como registro, re-arremesso etc. seja dissociado do local real de manuseio. Um exemplo desse componente é a Microsoft's Bloco de aplicativos de manuseio de exceção.
Então você pode acabar com um código como este:
try
{
results = _client.MethodCall(input parameteres);
_client.Close();
}
catch (Exception ex)
{
_client.CloseIfNeeded();
if (!ex.Handle("Wcf.Policy")) throw;
}
Onde CloseIfNeeded
indica um método de extensão personalizado que encapsula a lógica de fechamento do canal WCF e a Handle
O método de exceção chama o mecanismo de manuseio de exceção, passando em um nome da política de exceção que deve ser aplicada neste local.
Na maioria dos casos, você pode reduzir a lógica de manuseio de exceções para uma ou duas linhas de código decente, oferecendo vários benefícios:
- Configurabilidade instantânea do comportamento de manuseio de exceção (políticas)
- extensibilidade com manipuladores de exceção personalizados vinculados a tipos específicos de exceções e políticas de exceção
- Melhor capacidade de gerenciamento e legibilidade do código