我一直在关注如何使用.net实现自定义基本身份验证的文章。
这是article
代码使用了一个接口 - IBasicUser - 来自IIdentity。 BasicUser类实现IBasicUser。 创建了一个BasicUser实例,并从中构建了GenericPrincipal。
IBasicUser bu = new BasicUser();
context.Context.User = new GenericPrincipal(bu, new string[] { });
当我运行代码时,我得到一个例外。
Type 'Smithfamily.Blog.Samples.BasicUser' in assembly 'LM_TESTS, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' is not marked as serializable.
所以我查看了Reflector中的System.Security.Principal.GenericIdentity类,发现它确实标有属性[Serializable。标记有ComVisible特性(真)]
IIdentity上的Documentation没有说明需要可序列化的实现。从异常和反射器我假设它确实如此。所以我将[Serializable]属性添加到BasicUser类。
现在我在运行代码时遇到一个新的异常。
[SerializationException: Type is not resolved for member 'Smithfamily.Blog.Samples.BasicUser,LM_TESTS, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'.]
我对序列化不是很熟悉,也不太了解发生了什么或问题是什么。请你帮忙开导我。感谢。
答案 0 :(得分:1)
您是否在VS Web开发服务器中托管您的网站?如果是这样,看起来你偶然发现了MS Connect中记录的错误...
如果我正确地阅读了这篇文章和其他帖子,那么修复就是GAC你的DLL,以便通过.NET探测找到它并在运行时加载。
答案 1 :(得分:1)
Change:
public class CustomIdentity : IIdentity
For:
public class CustomIdentity : MarshalByRefObject, IIdentity
Not use that:
[Serializable]
public class CustomIdentity : IIdentity
答案 2 :(得分:0)
最后,我刚刚从VWD开发服务器上的应用程序测试切换到在Windows 7上的本地iis 7.5 express上进行测试。这似乎是简单的解决方案。