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