【问题标题】:Serialization Exception caused by custom Identity and GenericPrincipal自定义 Identity 和 GenericPrincipal 导致的序列化异常
【发布时间】:2011-10-17 18:32:35
【问题描述】:

我一直在关注一篇关于如何使用 .net 实现自定义基本身份验证的文章。

这是article

代码使用从 IIdentity 派生的接口 - IBasicUser。 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(true)]

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'.]

我对序列化不是很熟悉,也不太了解发生了什么或问题出在哪里。请你能帮我解惑。谢谢。

【问题讨论】:

标签: c# .net serialization


【解决方案1】:

您是否在 VS Web 开发服务器中托管您的网站?如果是这样,看起来你偶然发现了 MS Connect 中记录的错误...

http://connect.microsoft.com/VisualStudio/feedback/details/274696/using-custom-identities-in-asp-net-fails-when-using-the-asp-net-developement-server

如果我正确阅读了这篇文章和其他关于它的帖子,修复是对你的 DLL 进行 GAC,以便 .NET 探测可以正确找到它并在运行时加载。

【讨论】:

  • 非常感谢尼克提供的信息。很抱歉很迟钝,但我不熟悉 GACing DLL(我还是个新手)。请你能帮我解释一下吗?你的意思是把代码编译成一个单独的 DLL 到我的 MVC 项目并添加到 bin 目录吗?
  • 包含您的对象的 DLL 需要位于全局程序集缓存 (GAC) 中。一个简单的 bing\google 搜索将引导您找到以下内容:en.wikipedia.org/wiki/Global_Assembly_Cache。这篇维基百科文章应该可以帮助您开始 GACing。
  • 谢谢尼克!我尝试使用 GACing 但失败了。感谢您的链接。
  • 在开发过程中对 DLL 进行 GACing 并不理想...我建议您查看指向 this SO answer 的 @Donuts 链接作为更好的解决方案
【解决方案2】:

变化:

public class CustomIdentity : IIdentity

为:

public class CustomIdentity : MarshalByRefObject, IIdentity

不使用那个:

[Serializable]
public class CustomIdentity : IIdentity

【讨论】:

    【解决方案3】:

    最后,我只是从在 VWD 开发服务器上测试我的应用程序切换到在 Windows 7 上的本地 iis 7.5 express 上测试它。这似乎是最简单的解决方案。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多