Prueba/captura anidada. ¿Está bien?

Este código se llama en un controlador de eventos DoWork de BackgroundWorker, estoy creando un cliente WCF y usándolo en el bloque de prueba, si hay una excepción, quiero abortar y volver a intentarlo 5 veces antes de regresar del controlador.

    private void WorkerDoWork(object sender, DoWorkEventArgs e)
    {            
        var mmc = new ServiceClient();

        try
        {
            e.Result = mmc.SubmitData(measure);
        }
        catch (Exception)
        {
            mmc.Abort();

            mmc = new ServiceClient();

            var counter = 0;

            while ((bool)e.Result == false && counter++ < 5)
            {
                try
                {
                    e.Result = mmc.SubmitData(measure);
                }
                catch (Exception)
                {
                    mmc.Abort();
                    mmc = new ServiceClient();
                }
            }
        }
        finally
        {
            if (mmc.State == CommunicationState.Faulted)
            {
                mmc.Abort();
            }
            else
            {
                mmc.Close();
            }
        }
     }

No estoy realmente contento con el código, ¡siento que algo está mal con él! Especialmente el try/catch anidado.

¿Está bien este código? o debería refactorizarlo?

preguntado el 31 de julio de 12 a las 10:07

1 Respuestas

Sí, estoy de acuerdo en que el problema es martillar ciegamente el servicio web.

Es bueno saber qué posibles excepciones puede manejar.

Parece que solo está tratando con un punto final inalcanzable cuando, en cambio, podría recibir una advertencia sobre el formato de datos, tipos, límites, restricciones, fallas de autenticación, aciertos en el límite de uso de la cuenta, ¡CUALQUIER COSA!

Pero todo se trata como si un reintento lo arreglara, y si no es así, ¡está roto!

¿Qué tal algunos informes sobre los problemas encontrados?

Como buen programador, debe averiguar qué excepciones se lanzarán para qué situaciones y manejarlas, si puede, de manera adecuada.
Si no puede manejarlos, infórmelos al registro o al usuario (si es interactivo).

Respondido 31 Jul 12, 10:07

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.