Windows Azure Redis проблема миграции кеша
Мы размещаем наш сайт в Windows Azure, где сайт работает в нескольких экземплярах. Из-за нескольких экземпляров мы использовали общий кэш для хранения значений сеанса. Так как Microsoft собирается остановить общий кеш и рекомендует использовать redis кеш для хранения сессии. Я изменил проект, чтобы использовать кэш Redis, и он работал для большинства страниц. Моя проблема в том, что у нас есть очень важная страница "страница поиска" (мы используем lucene.net для функциональности поиска) на нашем сайте, которая хранит много данных в сеансе, и эта страница не работает. После нажатия кнопки поиска, он показывает статус подключения в адресной строке в течение длительного времени и переходит на страницу "К сожалению" на веб-сайте. Мы записываем сообщения об ошибках в БД, поэтому, посмотрев туда, мы обнаружили следующее сообщение об ошибке.
System.Runtime.Serialization.SerializationException: Type 'myWeb.clsSearchCriteria+ContentCriteria' in Assembly 'HelmBriscoeWeb, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' is not marked as serializable.
at System.Runtime.Serialization.FormatterServices.InternalGetSerializableMembers(RuntimeType type)
at System.Runtime.Serialization.FormatterServices.GetSerializableMembers(Type type, StreamingContext context)
at System.Runtime.Serialization.Formatters.Binary.WriteObjectInfo.InitMemberInfo()
at System.Runtime.Serialization.Formatters.Binary.WriteObjectInfo.InitSerialize(Object obj, ISurrogateSelector surrogateSelector, StreamingContext context, SerObjectInfoInit serObjectInfoInit, IFormatterConverter converter, ObjectWriter objectWriter, SerializationBinder binder)
at System.Runtime.Serialization.Formatters.Binary.WriteObjectInfo.Serialize(Object obj, ISurrogateSelector surrogateSelector, StreamingContext context, SerObjectInfoInit serObjectInfoInit, IFormatterConverter converter, ObjectWriter objectWriter, SerializationBinder binder)
at System.Runtime.Serialization.Formatters.Binary.ObjectWriter.Serialize(Object graph, Header[] inHeaders, __BinaryWriter serWriter, Boolean fCheck)
at System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Serialize(Stream serializationStream, Object graph, Header[] headers, Boolean fCheck)
at Microsoft.Web.Redis.RedisUtility.GetBytesFromObject(Object data)
at Microsoft.Web.Redis.RedisUtility.AppendUpdatedOrNewItemsInList(ChangeTrackingSessionStateItemCollection sessionItems, List`1 list)
at Microsoft.Web.Redis.RedisConnectionWrapper.TryUpdateIfLockIdMatchPrepare(Object lockId, ISessionStateItemCollection data, Int32 sessionTimeout, String[]& keyArgs, Object[]& valueArgs)
at Microsoft.Web.Redis.RedisConnectionWrapper.TryUpdateIfLockIdMatch(Object lockId, ISessionStateItemCollection data, Int32 sessionTimeout)
at Microsoft.Web.Redis.RedisSessionStateProvider.SetAndReleaseItemExclusive(HttpContext context, String id, SessionStateStoreData item, Object lockId, Boolean newItem)
at System.Web.SessionState.SessionStateModule.OnReleaseState(Object source, EventArgs eventArgs)
at System.Web.SessionState.SessionStateModule.OnEndRequest(Object source, EventArgs eventArgs)
at System.Web.HttpApplication.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)
Я не уверен, связано ли это с моей проблемой, но, кажется, если это исправлено, страница будет работать правильно. Кто-нибудь есть идеи, почему эта ошибка произошла и как я могу это исправить?
Спасибо
1 ответ
Я решил эту проблему сам, добавив атрибут сериализации в класс, как показано ниже.
<Serializable()> _
Public Class clsSearchCriteria
Спасибо