Pregunta

Tengo una clase que se encarga de todas las interacciones en mi solicitud con mi servicio WCF y parece que MSDN decir que el uso de Uso) _ comunicado con WCF es malo - puedo ver por qué esto es malo y de acuerdo con ella ( http://msdn.microsoft.com/en-us/library/aa355056.aspx)

mi problema es que su método sugerido de aplicación significará que tengo 10 métodos [como 10 métodos públicos en mi servicio] que tendrán el mismo código de estructura y esto por supuesto no se sigue el principio DRY - el código es similar a lo siguiente:

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;
}

Esto no tiene ningún registro todavía, pero por supuesto cuando me vienen a iniciar el registro, entonces voy a tener que añadir el trabajo de registro en casi 10 diferentes lugares

¿alguien tiene algún consejo sobre cómo puedo ser un poco más ingeniosos aquí en la reutilización de código

gracias

paul

¿Fue útil?

Solución

I sería utilizar algunos de propósito general, el componente que permite el procesamiento como el registro de control de excepciones básicas de gestión excepción configurable, re-lanzando etc., para ser desacoplado desde el lugar real de la manipulación. Un ejemplo de tal componente a es Excepción de Microsoft Manipulación de aplicación del bloque .

A continuación, usted podría terminar con un código como el siguiente:

try
{
    results = _client.MethodCall(input parameteres);
    _client.Close();
}
catch (Exception ex)
{
    _client.CloseIfNeeded();
    if (!ex.Handle("Wcf.Policy")) throw;
}

donde CloseIfNeeded indica un método de extensión de encargo encapsular la lógica de cierre canal WCF, y el método excepción Handle llama el mecanismo de manejo de excepciones, que pasa en un nombre de la política excepción de que se aplicarán en este lugar.

En la mayoría de los casos, se puede reducir la gestión de excepciones lógica para una decente o dos líneas de código, que le da varias ventajas:

  • configurabilidad instantánea del comportamiento de manejo de excepciones (políticas)
  • extensibilidad con manejadores de excepción personalizada con destino a determinados tipos de excepciones y las políticas de excepción
  • una mejor manejabilidad y facilidad de lectura de código
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top