2015-06-10 63 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,錯誤發生在這裏。 –

相關問題