Сериализация исключений WCF + Silverlight - PullRequest
0 голосов
/ 05 июня 2010

У меня есть служба WCF, которую я использую, чтобы отправлять сообщения об ошибках в моем проекте. Фрагмент класса данных:

Private _exception As Exception
<DataMember()> _
 Public Property Exception As Exception
    Get
        Return _exception
    End Get
    Set(ByVal value As Exception)
        _exception = value
    End Set
End Property

У меня есть приложение Silverlight, которое использует службу WCF для отправки любых ошибок домой, если и когда они возникнут. Это ошибка, с которой я тестирую:

 Dim i As Integer = 5
 i = i / 0

Проблема в том, что SL сталкивается с этим сообщением:

System.ServiceModel.CommunicationException не было обработано кодом пользователя Сообщение = Произошла ошибка при попытке сериализации параметра: ошибка. Сообщение InnerException было «Тип» System.OverflowException с именем контракта данных «OverflowException: http://schemas.datacontract.org/2004/07/System' не ожидается. Добавьте любые типы, которые не известны статически, в список известных типов - например, с помощью атрибута KnownTypeAttribute или добавив их в список известных типов, переданных в DataContractSerializer. '. Пожалуйста, смотрите InnerException для более подробной информации.

Есть ли какая-то хитрость, чтобы получить универсальное исключение .NET (любое исключение InnerException) для правильной сериализации? Я не делаю ничего необычного с исключением - это просто исключение

Спасибо за любую помощь.

Ответы [ 2 ]

1 голос
/ 05 июня 2010

Я очень сомневаюсь, что вы можете сериализовать специфичный для .NET тип, такой как Исключение. Я рекомендую вам создать свой собственный класс для хранения частей исключения, которое вы хотите сериализовать.

0 голосов
/ 05 июня 2010

Это может быть проблемой с неявным приведением OverflowException в System.Exception.

Сериализатор контракта данных очень специфичен. Это может быть хорошо и плохо.

Я бы попробовал просто сгенерировать новое исключение System.Exception, чтобы проверить, нормально ли это работает.

Если это так, вам может понадобиться исключить исключение, создав новое исключение System.Exception с исходным сообщением об исключении.

Или, как сказал Джон, вам, возможно, будет лучше, если вы создадите собственный класс ошибок, содержащий информацию об исключении.

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