当前位置: 首页 > 编程语言 > C#

Unabletoserializesessionstate分享

时间:2023-04-10 13:31:09 C#

Unabletoserializesessionstate当我的应用程序在线并尝试登录时,我得到这个错误:'/'应用程序中的服务器错误。无法序列化会话状态。在“StateServer”和“SQLServer”模式下,ASP.NET将序列化会话状态对象,因此不允许使用不可序列化的对象或MarshalByRef对象。如果类似的序列化是由自定义会话状态存储在“自定义”模式下完成的,则同样的限制适用。说明:在执行当前Web请求期间发生未处理的异常。请查看堆栈跟踪以获取有关错误及其在代码中的来源的更多信息。异常详细信息:System.Web.HttpException:无法序列化会话状态。在“StateServer”和“SQLServer”模式下,ASP.NET将序列化会话状态对象,因此不允许使用不可序列化的对象或MarshalByRef对象。如果自定义会话状态进行了类似的序列化,则适用相同的限制在“自定义”模式下撕裂。源错误:在执行当前Web请求期间生成了未处理的异常。可以使用下面的异常堆栈跟踪来识别有关异常来源和位置的信息。堆栈跟踪:[SerializationException:在程序集'App_Code.qzuhycmn,Version=0.0.0.0,Culture=neutral,PublicKeyToken=null'中键入'Gebruiker'未标记为可序列化。]System.Runtime.Serialization.FormatterServices.InternalGetSerializableMembers(RuntimeType类型)+9452985System.Runtime.Serialization.FormatterServices.GetSerializableMembers(类型类型,StreamingContext上下文)+247System.Runtime.Serialization.Formatters.Binary.WriteObjectInfo.InitMemberInfo()+160System.Runtime.Serialization.Formatters.Binary.WriteObjectInfo。InitSerialize(Objectobj,ISurrogateSelectorsurrogateSelector,StreamingContextcontext,SerObjectInfoInitserObjectInfoInit,IFormatterConverterconverter,ObjectWriterobjectWriter,SerializationBinderbinder)+218System.Runtime.Serialization.Formatters.Binary.WriteObjectInfo.Serialize(Objectobj,ISurrogateSelectorsurrogateSelector,StreamingContextcontext,SerObjectInfoInitserObjectInfoInit,IFormatterConverterconverter,ObjectWriterobjectWriter,SerializationBinderbinder)+54System.Runtime.Serialization。Formatters.Binary.ObjectWriter.Serialize(Objectgraph,Header[]inHeaders,__BinaryWriterserWriter,BooleanfCheck)+542System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Serialize(StreamserializationStream,Objectgraph,Header[]headers,布尔值fCheck)+133System.Web.Util.AltSerialization.WriteValueToStream(Objectvalue,BinaryWriterwriter)+1708[HttpException(0x80004005):无法序列化会话状态。在“StateServer”和“SQLServer”模式下,ASP.NET将序列化会话状态对象,因此不允许使用不可序列化的对象或MarshalByRef对象。的如果自定义会话状态存储在“自定义”模式下完成类似的序列化,则适用相同的限制。]System.Web.Util.AltSerialization.WriteValueToStream(Objectvalue,BinaryWriterwriter)+1793System.Web.SessionState.SessionStateItemCollection.WriteValueToStreamWithAssert(Object值,BinaryWriter编写器)+34System.Web.SessionState.SessionStateItemCollection.Serialize(BinaryWriter编写器)+638System.Web.SessionState.SessionStateUtility.Serialize(SessionStateStoreData项,Stream流)+244System.Web.SessionState.SessionStateUtility.SerializeStoreData(SessionStateStoreData项目,Int32initialStreamSize,Byte[]&buf,Int32&length,BooleancompressionEnabled)+67System.Web.SessionState.OutOfProcSessionStateStore.SetAndReleaseItemExclusive(HttpContextcontext,Stringid,SessionStateStoreDataitem,ObjectlockId,BooleannewItem)+114System.Web.SessionState.SessionStateModule.OnReleaseState(对象源,EventArgseventArgs)+807System.Web.SessionState.SessionStateModule.OnEndRequest(对象源,EventArgseventArgs)+184System.Web.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()+148System.Web.HttpApplication.ExecuteStep(IExecutionStepstep,Boolean&completedSynchronously)+75版本信息:Microsoft.NETFrameworkVersion:4.0.30319;ASP.NET版本:4.0.30319.1我在Sessions中做的唯一一件事是:在这个问题上有多个线程,但它们似乎都没有帮助我在本地一切正常,但在线却没有。我们能看到“Gebruiker”级吗?出现错误似乎很简单。Gebruiker不属于Serializable,所以不能放在StateServer和SQLServer模式的Session中。编辑:查看您链接的代码后,是的,这可能是因为该类不可序列化。LINQ生成的类应该是partialclass,所以你可以实现自己的partialclass,标记为Serializable,然后满足sessionstate要求。[Serializable()]publicpartialclassGebruiker{//Lotsofstuff}编辑2:Thomas,你的Gebruiker类可能有一个定义,现在看起来像这样(或类似的东西)namespaceXYZ{publicpartialclassGebruiker}只有你需要创建另一个具有相同命名空间的类文件,并使用可序列化属性命名空间XYZ{[Serializable()]publicpartialclassGebruiker{}}定义该类,这就是您在此文件中所需要的全部内容。这样,在创建LINQ生成的Gebruiker类时,不会覆盖可序列化属性。常规会话只是存储在内存中,但是当您在负载平衡环境中工作时,您不能依赖同一台服务器处理回发,为什么会话必须存储在主要是SQLServer和StateServer的共享会话机制中。这可以在machine.config或比应用程序网络更深的地方配置。为什么这样的变化可能不知道,但它可以解释你在部署到互联网时突然出现的异常。正如另一个答案和评论中提到的,当会话对象不是[Serializable]时就会出现问题;当您在常规会话中工作时,对象不会被序列化,而仅存储在服务器内存中,但Online引入了不同的会话机制和对象可序列化的需要。根据您发布的代码:该类是部分生成的,因此您需要做的就是添加另一个部分定义(当然在与生成的部分类相同的命名空间中):[Serializable]publicpartialclassGebruiker{}andAnother解决方案,虽然继承了不可序列化的类,但是也包含了ISerlializable接口的GetObjectData方法。继承的类也应该标记为[Serializable]。如果您在SharePoint2013上遇到此错误消息,请不要忘记运行以下PowerShellcmdlet:Enable-SPSessionStateService-DefaultProvision此错误消息是SP2013中的新消息;请参阅SP2010的这个问题:仅将enableSessionState设置为true以使用会话状态在我的例子中,我试图序列化一个非序列化的HttpResponse对象。因此,如果提供的解决方案不起作用,您可以阅读无法序列化会话状态一文中的解决方案。希望这可以帮助别人!有时你必须检查web.config中的以下属性如果SessionStatemode="SQLServer"那么你必须使用[Serializable()]publicsectionclassGebruiker。不然就得把SessionState模式改成"Inproc"例:以上是C#学习教程:无法序列化sessionstate分享的全部内容,如果对大家有用还需要详细了解C#学习教程,希望大家多多关注——本文摘自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: