我有一個在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 - 是的,這些是我的數據模型。像產品,客戶等 –
仍在尋找答案 –