4

我试图:

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

在网页中。但它不断抛出一个序列化异常:

在程序集“QC.Security, Version=1.0.0.1, Culture=neutral, PublicKeyToken=null”中键入“QC.Security.SL.SiteUser”未标记为可序列化。

然而,自定义 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; } }

我不知道如何调试它,因为我无法进入序列化程序代码来找出它为什么会崩溃。调用堆栈只有一帧深,然后才命中 [外部代码]。鉴于该类型已明确标记为可序列化,因此该错误消息几乎毫无用处。试错调整也产生了一个Type is not resolved for member异常。

它工作正常。但是现在“突然”它并不意味着 Visual Studio 中有一些愚蠢的错误,但重新启动对“这个”时间没有帮助。所以现在我不知道这是一个愚蠢的VS错误还是一个完全不相关的错误,我得到了一个序列化异常或者我做错了什么。

事实上,我只是不再相信 VS,因为我在过去几个月里一直在进行的疯狂追逐的数量是通过重新启动 VS 2008 或其他一些可笑的解决方法来“修复”的。

4

1 回答 1

7

好的,我已经解决了这个问题。这是/是另一个VS / Cassini问题。根据这个url 和这个url,解决方法是让 SiteUser 从 MarshalByRefObject 继承。

这是必要的,因为:

问题是 cassini 会随意分成单独的 AppDomain,这在 IIS 中不会发生(即使他们说它可以)。因此,当 Atlas 尝试将 JSON 转换为服务器上的某些内容时,它会执行某些操作并切换,并且 .User 自定义主体不会反序列化,因为程序集不在 GAC 中并且未在其他 AppDomain 中注册。

“开发者开发者开发者咳嗽

于 2010-04-10T00:43:19.627 回答