Как добавить исключение в мой интерфейс? - PullRequest
0 голосов
/ 05 августа 2010

У меня есть страница aspx, которая при нажатии кнопки создает экземпляр объекта serviceRefernece. В коде моей страницы вызов обернут в попытку / улов.

        try
        {
            var client = GetClient();
            var request = new ActiveVerificationRequestDC();
            var response = client.GetActiveVerification(request);
            DoSomethingWithTheResponse(response);      

        }
        catch (FaultException ex)
        {
            LogError(ex, MethodBase.GetCurrentMethod().Name);
            throw;

        }
        catch (Exception ex)
        {
            var args = new[] { MethodBase.GetCurrentMethod().Name, ex.Message };
            DisplayError(args);
        }

Файл SVC, на который ссылается, использует почти тот же шаблон. Это вызов внутреннего клиента через net.tcp. Вызов обернут в попытку / поймать

        try
        {
            var client = new InternalServiceClient();
            var response = client.GetActiveVerification(request);
            client.Close();
            return response;

        }
        catch (FaultException fe)
        {
            LogError(MethodBase.GetCurrentMethod().Name, fe);
            throw; 
        }

Вот моя проблема, как я могу получить здесь ошибки, чтобы всплыть в моем операторе catch пользовательского интерфейса? Когда я оставляю это так, я получаю необработанную ошибку исключения из visual studio. Я попытался удалить throw, что заставляет меня указать возвращаемое значение, и я возвращаю ноль. Это заставляет пользовательский интерфейс работать неправильно. Я попытался throw new Exception(fe.message), и я получаю ту же проблему с необработанным исключением. По сути, мой вопрос: как мне достичь того, что мне нужно? Чего мне не хватает?

Ответы [ 4 ]

1 голос
/ 05 августа 2010

Вам нужен отдельный блок try / catch вокруг вашего блока try / catch.У вас есть такая возможность, что вы поймаете FaultException и любой тип исключения, но ваш блок исключений не поймает ваш бросок из FaultException.Итак, просто заключите это с другой попыткой / обработкой или обработайте это как в ловушке FaultException, так и в ловушке Exception.

0 голосов
/ 15 октября 2013

Я полагаю, что вы должны добавить блок catch для того, чтобы ошибка всплыла

try
{
}
catch (SqlException _SqlException)
{
  //Log Error to file
  throw;
}
catch (IOException _IOexception)
{
  //Log Error to file
  throw;
}
catch (Exception _exception)
{
  //Log Error to file
  throw;
}

Этот тип блока будет в вызывающем методе

0 голосов
/ 05 августа 2010

Является ли FaultException вы повторно выбрасывает универсальный тип?Соответствующие классы детализированы какими-либо атрибутами FaultContract, доступными для всех сборок в этом стеке выполнения?

Редактировать: В вашем первом фрагменте кода ...

   catch (FaultException ex)
    {
        LogError(ex, MethodBase.GetCurrentMethod().Name);
        throw;
    }

Если в операторе throw этого обработчика возникает необработанная ошибка, то @MCain прав.

0 голосов
/ 05 августа 2010

Причиной может быть появление другого исключения во втором фрагменте кода, который не относится к типу FaultException;такое исключение будет считаться необработанным в этой ситуации.Возможно, вам следует добавить еще один блок catch во второй фрагмент кода, который перехватывает исключения типа Exception:

    catch (FaultException fe)
    {
        LogError(MethodBase.GetCurrentMethod().Name, fe);
        throw; 
    }

    catch (Exception ex)
    {
        throw;
    }
...