标签:memcached returns 状态 red 自定义 emc star ... void
造成这个错误的原因是在使用 Senparc.Weixin SDK 或者 CO2NET 的扩展缓存的时候,没有对扩展缓存策略进行注册(激活)。解决方案如下:
.NET Framework:
在 global.asax.cs 文件的 Application_Start() 方法中,加入代码:
RegisterService.Start() .UseSenparcWeixin(null, true, GetExContainerCacheStrategies)//必须
.NET Core:
在 startup.cs 中 加入代码:
public void Configure(IApplicationBuilder app, IHostingEnvironment env, IOptions<SenparcSetting> senparcSetting, IOptions<SenparcWeixinSetting> senparcWeixinSetting) { //... RegisterService.Start(env, senparcSetting.Value) .UseSenparcWeixin(senparcWeixinSetting.Value, isDebug/*此处为单独用于微信的调试状态*/, () => GetExContainerCacheStrategies(senparcWeixinSetting.Value)) //... }
其中的 GetExContainerCacheStrategies 委托定义如下:
/// <summary> /// 获取Container扩展缓存策略 /// </summary> /// <returns></returns> private IList<IDomainExtensionCacheStrategy> GetExContainerCacheStrategies() { var exContainerCacheStrategies = new List<IDomainExtensionCacheStrategy>(); //判断Redis是否可用 var redisConfiguration = ConfigurationManager.AppSettings["Cache_Redis_Configuration"]; if ((!string.IsNullOrEmpty(redisConfiguration) && redisConfiguration != "Redis配置")) {
exContainerCacheStrategies.Add(RedisContainerCacheStrategy.Instance);
} //判断Memcached是否可用 var memcachedConfiguration = ConfigurationManager.AppSettings["Cache_Memcached_Configuration"]; if ((!string.IsNullOrEmpty(memcachedConfiguration) && redisConfiguration != "Memcached配置")) { exContainerCacheStrategies.Add(MemcachedContainerCacheStrategy.Instance); } //也可扩展自定义的缓存策略 return exContainerCacheStrategies; }
GetExContainerCacheStrategies 的内容可以灵活多变,总的用意是把系统当中需要用到的扩展缓存通过这一句话进行注册:
exContainerCacheStrategies.Add(RedisContainerCacheStrategy.Instance);
Senparc.Weixin 默认提供了三种 Container 的扩展缓存策略:
其中,LocalContainerCacheStrategy 是自带的本地缓存,会自动注册,无需手动注册,另外两个是由单独的 dll 提供的,因此需要进行一次手动的注册。
标签:memcached returns 状态 red 自定义 emc star ... void
原文地址:https://www.cnblogs.com/szw/p/9265828.html