ASP.NET 中使用WebServer進行調試時,自定義的Identity出現 SerializationException的解決方法

今天遇到一個奇怪的問題,雖然已經解決了,但是原因仍然不是很清楚。

在新建的一個ASP.NET MVC中使用了自定義的Identity,在使用VS自帶的WebServer調試時,發生了類似如下錯誤:

Type is not resolved for member'XAssembly, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.Runtime.Serialization.SerializationException: Type is not resolved for member 'XAssembly.MyIdentity,XAssembly, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'.

Source Error:

An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.

Stack Trace:

[SerializationException: Type is not resolved for member 'XAssembly.MyIdentity,XAssembly, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'.]
   Microsoft.VisualStudio.WebHost.Connection.get_RemoteIP() +0
   Microsoft.VisualStudio.WebHost.Request.GetRemoteAddress() +65
   System.Web.HttpRequest.get_UserHostAddress() +18
   System.Web.HttpRequest.get_IsLocal() +13
   System.Web.Configuration.CustomErrorsSection.CustomErrorsEnabled(HttpRequest request) +86
   System.Web.HttpContext.get_IsCustomErrorEnabled() +42
   System.Web.Configuration.UrlAuthFailedErrorFormatter.GetErrorText(HttpContext context) +16
   System.Web.Security.UrlAuthorizationModule.WriteErrorMessage(HttpContext context) +29
   System.Web.Security.UrlAuthorizationModule.OnEnter(Object source, EventArgs eventArgs) +8777783
   System.Web.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +68
   System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +75

同樣的代碼,在使用IIS或IIS Express進行調試或運行時,就不會出錯。

最初嘗試根據提示添加Attribute [Serializable]但是錯誤依舊。

後來將原來Identity的定義由

public class MyIdentity : IIdentity{
//...
}

改爲

public class MyIdentity : MarshalByRefObject ,IIdentity{
//...
}

即解決,但是最終發生原因還是沒有探明,從異常上看來,似乎是WebServer內部的一個Bug。

References:

http://stackoverflow.com/questions/1277371/serializationexception-on-customidentity-when-user-is-denied-in-asp-net

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章