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

Foi útil?

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
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top