Необработанное исключение WCF из-за пользовательского кода

#c# #wcf #error-handling

#c# #wcf #обработка ошибок

Вопрос:

Я разрабатываю службу WCF с C # и .NET Framework 4.0.

У меня есть следующий код:

 public long CreateUser(string userName)
{
    try
    {
        if ((userName == null) ||
            (userName.Equals(string.Empty)))
            throw new ArgumentNullException();

        ...

    }
    catch (Exception ex)
    {
        resultCode = 3;
        throw ex;
    }

    ...

}
  

когда имя пользователя == строка.Пустой отладчик останавливается, и в диалоговом окне говорится:

 ArgumentNullException unhandled by user code.
  

Как я могу это исправить?

Обновить

Я хочу уведомить клиента о том, что произошла ошибка на стороне сервера.

Комментарии:

1. Я хочу уведомить клиента о том, что произошла ошибка на стороне сервера.

2. примечание: никогда не используйте throw ex , используйте throw для повторного создания исключения

3. что ж, если вы хотите уведомить клиента, используйте строку. Проверьте IsNullOrEmpty и уведомите клиента любым способом, который вы выберете.

4. Это WCF. Я думаю, что есть способ уведомить клиента, но я не знаю как. Вот почему я ушел throw ex .

5. Не выбрасывайте ex; Таким образом, вы потеряете информацию. Вместо этого вы должны просто написать throw ; таким образом, вы сохраните всю информацию, stacktrace.

Ответ №1:

Вам необходимо обработать исключение при использовании метода CreateUser:

 try
{
    myClass.CreateUser (user);

}
catch (ArgumentNullException ex)
{

}
  

Ответ №2:

Я думаю, было бы лучше просто сделать что-то подобное в верхней части вашего метода, а не создавать и выдавать исключение.

 if (string.IsNullOrEmpty(userName))
{
  //handle
}
  

Ответ №3:

Я думаю, строка.IsNullOrEmpty() — самый понятный способ; но я не уверен, что понимаю вопрос.

Ваш IF работает; и ваш код выдает исключение. Итак, записываем его с помощью строки.IsNullOrEmpty() этого не изменит.

Вы хотите знать, как «обработать» это исключение?

Ответ №4:

Если вы хотите уведомить клиента, используйте FaultException.

Ответ №5:

Обработайте исключение 🙂

Это нормальное поведение.

Ваш клиент должен вызвать ваш метод следующим образом:

 try {
   long result = myService.CreateUser(someVariable);
} catch (ArgumentNullException exc)
{
  // Your error-handling code here
}
  

Если вы не хотите обрабатывать исключение, а просто обрабатываете «код ошибки» (что является плохой практикой, определенно не рекомендуется), тогда вам следует удалить строку «throw ex;» из вашего кода.

Ответ №6:

Во-первых, вы должны знать о String.IsNullOrEmpty(), это полезно в случае, который вы указали.

Во-вторых, вы создаете исключение в стеке. Дальше должен быть блок try / catch, который перехватывает создаваемое вами исключение. Здесь попытка / перехват не приносит вам никакой пользы.

 public long CreateUser(string userName)
{
        if (String.IsNullOrEmpty(userName))
            throw new ArgumentNullException();

        ...
}
  

затем в другом месте,

 try 
{
     someClass.CreateUser(userName);
}
catch (ArgumentNullException ex)
{
  ... error handling code here
}