Передача исключения как часть ответа в WCF - PullRequest
2 голосов
/ 23 февраля 2010

У меня есть несколько необычное использование исключений в моем приложении. Если в методе возникает исключение, я передаю его как часть объекта результата, что-то вроде этого:

public class MethodResponse
{
  public List<Exception> Errors {get; set;}
  public int SomeResult {get; set;}
}

Теперь я разделяю бизнес-уровень и уровень пользовательского интерфейса с помощью WCF, и у меня возникает проблема - WCF не нравятся объекты Exception, и, если они присутствуют в списке ошибок, происходит сбой службы. Я провел некоторое исследование, и похоже, что WCF не может сериализовать класс Exception.

Есть ли обходной путь?

Ответы [ 2 ]

6 голосов
/ 23 февраля 2010

Вам нужно помнить одну большую проблему: предполагается, что WCF совместим - исключений .NET нет - это только .NET. Java или Ruby не смогут обработать ваши исключения ....

Все, что вы передаете между вашим сервером WCF и клиентом, должно быть XML-сериализуемым. Таким образом, по сути, вам нужно заключить эти исключения в совместимые ошибки SOAP - они действительно совместимы и сериализуемы. Или вам нужно определить свой собственный тип "WCFError", который инкапсулирует всю необходимую вам информацию из исключения .NET - такие как код ошибки, сообщение об ошибке и т. Д. - и на вашем сервере WCF реализуйте интерфейс IErrorHandler и включите все исключения .NET. в экземпляры вашего собственного класса ошибок и передайте его вызывающей стороне.

Надеюсь, это поможет хоть немного - волшебной пули нет - вам просто нужно знать, что WCF может и не может обработать - и почему.

2 голосов
/ 23 февраля 2010

Вы можете подумать, является ли подход, который вы используете, правильным. Исключения служат определенной цели в .NET Framework; они не предназначены для передачи данных. Какую информацию, касающуюся исключений, нужно передать между бизнес-уровнем обратно на уровень пользовательского интерфейса? Возможно, вы захотите создать класс ошибок DTO, содержащий информацию о каждом исключении, которое вам нужно передать, а затем вернуть список объектов ошибок DTO.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...