2010-04-10 2 views
4

Я пытаюсь:Отладка: Как отлаживать «Тип не помечен как сериализуемая» исключение, если тип помечен как сериализуемым

((Request.Params["crmid"] != null)) 

на веб-странице. Но он продолжает бросать исключение сериализации:

Тип 'QC.Security.SL.SiteUser' в сборки 'QC.Security, Version = 1.0.0.1, культура = нейтральной, PublicKeyToken = NULL' не обозначен как сериализуемым.

Тип, обычай IIdentity, является тем не менее отмечен как сериализуемым следующим образом:

[Serializable()] 
    public class SiteUser : IIdentity 
    { 
     private long _userId; 
     public long UserId { get { return _userId; } set { _userId = value; } } 
     private string _name; 
     public string Name { get { return _name; } } 
     private bool _isAuthenticated; 
     public bool IsAuthenticated { get { return _isAuthenticated; } } 
     private string _authenticationType; 
     public string AuthenticationType { get { return _authenticationType; } } 

Я понятия не имею, как отладить это, как я не могу войти в код сериализатора, чтобы выяснить, почему его падения. Стек вызова составляет всего один кадр, прежде чем он ударит [External Code]. И сообщение об ошибке рядом с бесполезным, учитывая, что тип четко обозначен как сериализуемый. Пробные и исправления ошибок также вызвали тип, который не разрешен для исключения члена.

Он работал нормально. Но теперь «внезапно» это не так, что обычно означает какую-то немую ошибку в Visual Studio, но перезагрузка не помогает «это» время. Так что теперь я не знаю, является ли это глупой ошибкой VS или полностью несвязанной ошибкой, для которой Im получает исключение для сериализации или что-то, что я делаю неправильно.

По правде говоря, я просто не доверяю ВС больше, учитывая количество диких гонистых преследований. Я был в течение последних нескольких месяцев, которые были «исправлены», перезагрузив VS 2008 или какое-то другое переработанное обходное решение.

ответ

7

О.к. поэтому я исправил проблему. Это была еще одна проблема VS/Cassini. Согласно this url и this URL-адрес обходного пути заключается в том, чтобы сделать SiteUser наследованием от MarshalByRefObject.

Это потому, необходимое:

Вопрос заключается в том, что Кассини сломается на отдельные AppDomains по желанию, который не происходит в IIS (даже , хотя они говорят, что CAN). Из-за этого , когда Атлас пытается преобразовать в JSON на что-то на сервере , он делает что-то и переключает и .user пользовательские поручитель не десериализации, так как сборка не в GAC и не зарегистрировано другим AppDomain.

«ДЕВЕЛОПЕРЫ разработчики кашля»

+5

Хорошо, что вы исправили проблему, но кто развивает в Кассини так или иначе? Почему бы не начать прямо на платформе, которая будет размещать ваш сайт (IIS)? Это сэкономит вам массу неприятностей в долгосрочной перспективе. –

+0

У меня такая же проблема - что за дерьмо. Я посмотрю в исправление маршала. Спасибо. – UpTheCreek

+0

Кроме того, взгляните на это: http://stackoverflow.com/questions/1884030/implementing-a-custom-identity-and-iprincipal-in-mvc – UpTheCreek

Смежные вопросы