2015-06-10 87 views
1

我将解决方案从VS2010迁移到VS2013后,出现InvalidCastException。无法转换类型为'System.Web.Hosting.SimpleWorkerRequest'的对象以键入'System.Web.Hosting.IIS7WorkerRequest'

在VS2010一切正常,同样的代码给出VS2013以下错误:

类型的异常则“”发生在 System.Web.dll中,但在用户代码中没有处理

其他信息:无法转换 类型的对象“System.Web.Hosting.SimpleWorkerRequest”到类型 “System.Web.Hosting.IIS7WorkerRequest”。

我不知道该怎么办,在互联网上找不到任何相关内容。

误差在下面的代码段发生在第5行:

public static void AuthenticateUser(String UserName, Int32 Minutes = 30, Boolean IsPersistent = true) 
    { 
     FormsAuthenticationTicket _ticket = new FormsAuthenticationTicket(1, UserName, DateTime.Now, DateTime.Now.AddMinutes(Minutes), IsPersistent, String.Empty); 
     FormsIdentity _id = new FormsIdentity(_ticket); 
     var _roles = Roles.GetRolesForUser(UserName); 
     HttpContext.Current.User = new System.Security.Principal.GenericPrincipal(_id, _roles); 
    } 

回答

2

从技术上讲,这不是一个答案。但它帮助我解决了我的问题。 因此,我将与大家分享这些信息,希望这能够在不久的将来为某人避免一些头痛的问题。

在Visual Studio 2010 Professional中,我使用Visual Studio Development Server使用特定端口(4302)运行我的项目。

在Visual Studio 2013社区版中,我在IIS Express上运行我的项目。 出于某种原因,我仍然不知道为什么,这导致我的软件将“IIS7WorkerRequest”投射到“SimpleWorkerRequest”对象。

当我切换到带有自定义虚拟目录的本地IIS服务器后,我的错误消失了。如果有人能够解释这一点,我很想知道为什么会发生这种情况。但目前这解决了上述问题。

1

不能从同级类到另一个兄弟投;你可以从父母到孩子,或孩子到父母,但不能在兄弟姐妹之间进行投。

https://msdn.microsoft.com/en-us/library/ms173105.aspx

由于这两种的SimpleWorkerRequest和IIS7WorkerRequest从继承的HttpWorkerRequest,你不能施放它们之间。我首先要问自己,为什么你想或者认为你必须执行这种转换,如果你找不到替代方案,那就编写一个转换方法来映射它们。然而,这通常是一个很好的迹象,表明你正在走向错误的代码路径。

+0

错误发生在一段代码中,演员不是由我完成的。我编辑了我的问题。 –

+0

是AuthenticateUser一个用户定义的方法吗?尝试打破Roles.GetRolesForUser调用来查看错误是否真的在那里发生。如果是这样,是所有用户还是只有一个?基本的问题是某处某处正在尝试这种非法演员。导致这种非法转换的假设必须经过检查,然后才能解决。 – Marisa

+0

AuthenticateUser是用户定义的方法。我已经打破了Roles.GetRolesForUser,错误发生在这里。 –

相关问题