我有一个在Azure App Service上托管的ASP.Net应用程序。Azure Redis缓存序列化
我知道默认的“InProc”会话缓存在Azure中不起作用。
一直在寻找解决办法,和整个Redis的来了,这是我在Azure中启用并设定按照配置文件
<sessionState mode="Custom" customProvider="RedisStateStore">
<providers>
<add name="RedisStateStore" type="Microsoft.Web.Redis.RedisSessionStateProvider"
host="xxx.redis.cache.windows.net:6380" accessKey="xxx=" ssl="true"
redisSerializerType="MyApp.Net.Helper.JsonSerializer,MyApp.Net"
/>
</providers>
</sessionState></system.web>
默认情况下,我开始总成没有序列号错误一些形式。由于我使用了50个表格,所以不确定哪一个是序列化的,而且它变得单调乏味。
因此启用自定义处理程序处理程序在这里:
public class JsonSerializer : Microsoft.Web.Redis.ISerializer
{
private static readonly JsonSerializerSettings Settings = new JsonSerializerSettings() { TypeNameHandling = TypeNameHandling.All,
ReferenceLoopHandling = ReferenceLoopHandling.Ignore, PreserveReferencesHandling = PreserveReferencesHandling.Objects,
Error = (serializer, err) => {
err.ErrorContext.Handled = true;
}
};
public byte[] Serialize(object data)
{
return Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(data, Settings));
}
public object Deserialize(byte[] data)
{
return data == null ? null : JsonConvert.DeserializeObject(Encoding.UTF8.GetString(data), Settings);
}
}
但是,这就像每个序列化对象那里,我觉得它实际上拖慢系统进一步。然后将其失败的一些对象数组,像following
如果我忽略了像上面的代码(我知道是不好的做法)的错误,有时我遇到的System.OutOfMemoryException例外。
任何意见在这里感激。
''我开始为某些窗体获取程序集而不是序列化错误。'您是否检查过哪个程序集未标记为可序列化? –
@ FredHan-MSFT - 是的,这些是我的数据模型。像产品,客户等 –
仍在寻找答案 –