gpt4 book ai didi

c# - Microsoft ASP.NET Redis session 状态引发异常

转载 作者:IT王子 更新时间:2023-10-29 06:10:06 25 4
gpt4 key购买 nike

使用 Microsoft ASP.NET Redis session 状态提供程序将 ASP.NET 网站连接到 Azure Redis 缓存(但使用本地 Redis 实例时也会出现此错误)时,我收到空引用异常。为什么?谷歌什么也没告诉我。我尝试过使用 Russian Redis session 状态提供程序,但这会随机破坏 session 状态,因此我也无法使用它。

这是堆栈跟踪:

[NullReferenceException: Object reference not set to an instance of an object.]
Microsoft.Web.Redis.StackExchangeClientConnection.Eval(String script, String[] keyArgs, Object[] valueArgs) +381
Microsoft.Web.Redis.RedisConnectionWrapper.TryUpdateIfLockIdMatch(Object lockId, ISessionStateItemCollection data, Int32 sessionTimeout) +108
Microsoft.Web.Redis.RedisSessionStateProvider.SetAndReleaseItemExclusive(HttpContext context, String id, SessionStateStoreData item, Object lockId, Boolean newItem) +1280
System.Web.SessionState.SessionStateModule.OnReleaseState(Object source, EventArgs eventArgs) +565
System.Web.SessionState.SessionStateModule.OnEndRequest(Object source, EventArgs eventArgs) +139
System.Web.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +136
System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +69

我不知道这个问题发生在哪里,因为堆栈跟踪没有触及我的代码,但它发生在我登录后访问我的网站的任何网址上,是的,使用表单例份验证。

我的 redis 配置如下所示:

<sessionState mode="Custom" customProvider="RedisSessionStateStoreProvider">
<providers>
<clear />
<add name="RedisSessionStateStoreProvider" type="Microsoft.Web.Redis.RedisSessionStateProvider, Microsoft.Web.RedisSessionStateProvider, Version=0.4.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
host="*******.redis.cache.windows.net"
throwOnError = "true"
connectionTimeoutInMilliseconds = "5000"
retryTimeoutInMilliseconds = "5000"
operationTimeoutInMilliseconds = "5000"
ssl="true"
accessKey="*******************************"
/>
</providers>

...我在其中标出了访问 key 和服务 URI。

编辑:当我在 MSDN 论坛上发现一篇处理间歇性空引用异常的帖子(嘘!)时,我很高兴,并认为我已经找到了解决方案,其中他们警告说,分配了空值的不存在的键将打破一切。我发现了一个我正在这样做的实例并修复了它,但这实际上并没有达到目的,并且仍然存在同样的问题。

我正在使用 Microsoft.Web.RedisSessionStateProvider 0.4.0.0-Pre-121,据称它修复了类似的错误

最佳答案

问题是我设法使用 Null 作为键(!!!)。我认为正确命名的常量(就像所有其他键名称一样)实际上是一个空变量。

这个错误的影响差异很大,所以如果对任何人有帮助的话,我会将它们发布在这里:

插入 Null 作为键会导致 ASP.NET Universal Providers session 状态提供程序和 RedisAspNetProviders SessionStateProvider 一直工作,直到插入带有 null 键的致命值后进行第一次反序列化,之后它们会因 HttpException 爆炸(这是可能是正确的,尽管可以提供稍微有用的错误消息)或内存不足异常,当我尝试存储列表时,这是意外的。

当插入愚蠢的 key 时,Microsoft Redis session 状态提供程序直接用 NRE 炸毁,我们这些白痴可能会使用更好的消息来节省我们的时间。

在我知道错误是什么之前,我尝试使用 Azure AppFabric 作为替代方案,但它的响应不足以进行测试。

关于c# - Microsoft ASP.NET Redis session 状态引发异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25644352/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com