我有一个用ASP.NET MVC编写的网站。有一些自定义授权逻辑,并添加了以下属性。
public sealed class CustomAuthorizeAttribute : AuthorizeAttribute
在AuthorizeCore方法的覆盖中,我尝试访问Session和:
更多信息: 模式:SQL服务器
<sessionState allowCustomSqlDatabase="true" cookieless="UseCookies" mode="SQLServer" sqlConnectionString="Server=.;Database=ASPState;integrated security=true;" timeout="120" sqlCommandTimeout="240" />
堆栈追踪:
at System.Runtime.Serialization.Formatters.Binary.ObjectReader.ParseArrayMember(ParseRecord pr) 在System.Runtime.Serialization.Formatters.Binary.ObjectReader.ParseMember(ParseRecord pr) 在System.Runtime.Serialization.Formatters.Binary.ObjectReader.Parse(ParseRecord pr) 在System.Runtime.Serialization.Formatters.Binary ._ BinaryParser.ReadMemberReference() 在System.Runtime.Serialization.Formatters.Binary。 _BinaryParser.Run() 在System.Runtime.Serialization.Formatters.Binary.ObjectReader.Deserialize(HeaderHandler handler,__BinaryParser serParser,Boolean fCheck,Boolean isCrossAppDomain,IMethodCallMessage methodCallMessage) 在System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Deserialize(Stream serializationStream,HeaderHandler handler,Boolean fCheck,Boolean isCrossAppDomain,IMethodCallMessage methodCallMessage) 在System.Web.Util.AltSerialization.ReadValueFromStream(BinaryReader reader) 在System.Web.SessionState.SessionStateItemCollection.ReadValueFromStreamWithAssert() 在System.Web.SessionState.SessionStateItemCollection.DeserializeItem(String name,Boolean check) 在System.Web.SessionState.SessionStateItemCollection.get_Item(String name) 在System.Web.SessionState.HttpSessionStateContainer.get_Item(String name) 在System.Web.SessionState.HttpSessionState.get_Item(String name) 在{mynamespace} .SessionHelper.get_UserSessionContext()在d:{mypath} \ SessionHelper.cs:第41行 在{mynamespace} .CustomAuthorizeAttribute.AuthorizeCore(HttpContextBase httpContext)在d:{mypath} \ CustomAuthorizeAttribute.cs:第50行 在System.Web.Mvc.AuthorizeAttribute.OnAuthorization(AuthorizationContext filterContext) 在System.Web.Mvc.ControllerActionInvoker.InvokeAuthorizationFilters(ControllerContext controllerContext,IList`1过滤器,ActionDescriptor actionDescriptor) 在System.Web.Mvc.Async.AsyncControllerActionInvoker。&lt;&gt; c_ DisplayClass25.b _1e(AsyncCallback asyncCallback,Object asyncState)
任何人都可以解释为什么会出现这种错误,我该如何排除故障以及解决这个问题的可能方法?
答案 0 :(得分:2)
这听起来像基于类型的序列化程序(BinaryFormatter
,NetDataContractSerializer
等)的常见问题,它与构建之间的不兼容类型一起使用。在一般情况下,这种类型的工作方式足以使通常允许您在构建之间使用相同的数据(因为您通常不会更改涉及的类型),但是:有一个很大的动态类型生成时的问题 - 在Entity Framework和NHibernate等工具中广泛使用。从本质上讲,因为它们在运行时是子类,所以几乎可以保证您永远无法在重建之间进行反序列化,甚至可能在应用程序重新启动之间以及集群中不同节点之间进行反序列化。
这里有两条指导: