相关疑难解决方法(0)

使用MarshalByRefObject与序列化相比有多贵?

在我的Azure Web角色代码中,我有一个CustomIdentity派生自的类System.Security.Principal.IIdentity.在某些时候,.NET运行时尝试序列化该类,序列化将无法正常工作.试图解决我搜索了很多,找到了这个答案,并试图继承我的班级MarshalByRefObject.

现在,一旦我的CustomIdentity类继承,MarshalByRefObject就不再有序列化尝试了,我的代码就可以工作了.但是,我想知道使用MarshalByRefObject类的性能影响.

我的代码运行方式如下.首先,请求到达IIS并传递给身份验证代码,该代码创建实例CustomIdentity并将该实例附加到HTTP上下文.然后一段时间后,相同的HTTP上下文被传递给ASP.NET处理程序,该处理程序CustomIdentity最多访问该实例一次.该CustomIdentity对象的生活为请求的时间,然后被销毁.

现在通过序列化,我CustomIdentity将序列化为流,然后从该流反序列化为新对象.由于MarshalByRefObject没有序列化,但创建了代理,并且访问将通过RPC封送到实际对象所在的位置.

MarshalByRefObject在这种情况下使用会有多贵?哪个 - MarshalByRefObject或序列化 - 会更昂贵?

.net c# performance serialization marshalling

7
推荐指数
1
解决办法
2646
查看次数

调试:当类型IS标记为可序列化时,如何调试"类型未标记为可序列化"异常

我试着:

((Request.Params["crmid"] != null))
Run Code Online (Sandbox Code Playgroud)

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

类型"QC.Security.SL.SiteUser"在组件"QC.Security,版本= 1.0.0.1,文化=中性公钥=空"未标记为可序列.

然而,类型(自定义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; } }
Run Code Online (Sandbox Code Playgroud)

我不知道如何调试这个,因为我无法进入序列化器代码,以找出它为什么会摔倒.调用堆栈在到达[外部代码]之前只有一帧深度.并且错误消息是无用的,因为类型明确标记为可序列化.试验和错误调整也产生了一个类型未解决的成员异常.

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

事实上,我不再相信VS了,因为过去几个月我一直在进行的疯狂追逐数量,这是通过重新启动VS 2008或其他一些荒谬的解决办法来"修复"的.

asp.net debugging serialization cassini visual-studio

4
推荐指数
1
解决办法
1万
查看次数