Отладка: Как отлаживать исключение «Тип не помечен как сериализуемый», когда тип помечен как сериализуемый - PullRequest
4 голосов
/ 10 апреля 2010

Я пытаюсь:

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

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

Введите 'QC.Security.SL.SiteUser' в сборка "QC.Security, Версия = 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; } }

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

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

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

1 Ответ

7 голосов
/ 10 апреля 2010

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

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

Проблема в том, что Кассини сломается в отдельные домены приложений по желанию, что не происходит в IIS (даже хотя говорят, что МОЖЕТ). Из-за это когда Атлас пытается конвертировать в JSON к чему-то на сервер, он что-то делает и переключается и пользовательский пользователь .User не десериализовать, потому что сборка не в GAC и не зарегистрированы в другой домен приложений.

"Разработчики разработчики разработчики кашель "

...