Почему я получаю ошибки TypeLoadExceptionHolder после повторного использования пула приложений IIS?
У меня есть веб-приложение ASP.NET, которое использует StateServer для сессии. Приложение хранит несколько бит информации в сеансе; один, в частности, является графом объектов, где все задействованные объекты имеют атрибут Serializable. Это все работает нормально, пока я не перезапущу пул приложений, в котором размещено веб-приложение.
Если я вошел в систему и в моем сеансе хранится граф объектов, и я перезапускаю пул приложений, а затем перезагружаю страницу, я получаю следующее исключение:
Error in: MyUrl Source: mscorlib Error Message: Object of type 'System.Runtime.Serialization.TypeLoadExceptionHolder' cannot be converted to type 'MyObject'.
Stack Trace:
at System.RuntimeType.TryChangeType(Object value, Binder binder, CultureInfo culture, Boolean needsSpecialCast) at System.RuntimeType.CheckValue(Object value, Binder binder, CultureInfo culture, BindingFlags invokeAttr)
at System.Reflection.RtFieldInfo.UnsafeSetValue(Object obj, Object value, BindingFlags invokeAttr, Binder binder, CultureInfo culture) at System.Runtime.Serialization.FormatterServices.SerializationSetValue(MemberInfo fi, Object target, Object value)
at System.Runtime.Serialization.FormatterServices.PopulateObjectMembers(Object obj, MemberInfo[] members, Object[] data)
at System.Runtime.Serialization.Formatters.Binary.ObjectReader.ParseObjectEnd(ParseRecord pr)
at System.Runtime.Serialization.Formatters.Binary.__BinaryParser.Run()
at System.Runtime.Serialization.Formatters.Binary.ObjectReader.Deserialize(HeaderHandler handler, __BinaryParser serParser, Boolean fCheck, Boolean isCrossAppDomain, IMethodCallMessage methodCallMessage)
at System.Web.Util.AltSerialization.ReadValueFromStream(BinaryReader reader)
at System.Web.SessionState.SessionStateItemCollection.ReadValueFromStreamWithAssert() at System.Web.SessionState.SessionStateItemCollection.DeserializeItem(String name, Boolean check)
at System.Web.SessionState.SessionStateItemCollection.get_Item(String name)
at System.Web.HttpSessionStateWrapper.get_Item(String name)
at MyCode
У меня сложилось впечатление, что, поскольку состояние сеанса хранится вне процедуры, на него не повлияет переработка пула приложений. Разве это не так?