gpt4 book ai didi

asp.net-mvc-2 - asp.net mvc azure "Error accessing the data store!"

转载 作者:行者123 更新时间:2023-12-03 21:53:39 24 4
gpt4 key购买 nike

我已开始使用 AspProviders 代码将 session 数据存储在表存储中。

我偶尔会收到以下错误:

Description: Exception of type 'System.Web.HttpException' was thrown. INNER_EXCEPTION:Error accessing the data store! INNER_EXCEPTION:An error occurred while processing this request. INNER_EXCEPTION: ConditionNotMet The condition specified using HTTP conditional header(s) is not met. RequestId:0c4239cc-41fb-42c5-98c5-7e9cc22096af Time:2010-10-15T04:28:07.0726801Z StackTrace:System.Web.SessionState.SessionStateModule.EndAcquireState(IAsyncResult ar)System.Web.HttpApplication.AsyncEventExecutionStep.OnAsyncEventCompletion(IAsyncResult ar) INNER_EXCEPTION:Microsoft.Samples.ServiceHosting.AspProviders.TableStorageSessionStateProvider.ReleaseItemExclusive(HttpContext context, String id, Object lockId) in \Azure\AspProviders\TableStorageSessionStateProvider.cs:line 484System.Web.SessionState.SessionStateModule.GetSessionStateItem()System.Web.SessionState.SessionStateModule.PollLockedSessionCallback(Object state) INNER_EXCEPTION:Microsoft.WindowsAzure.StorageClient.Tasks.Task1.get_Result()
Microsoft.WindowsAzure.StorageClient.Tasks.Task
1.ExecuteAndWait()Microsoft.WindowsAzure.StorageClient.TaskImplHelper.ExecuteImplWithRetry[T](Func`2 impl, RetryPolicy policy)Microsoft.Samples.ServiceHosting.AspProviders.TableStorageSessionStateProvider.ReleaseItemExclusive(TableServiceContext svc, SessionRow session, Object lockId) in \Azure\AspProviders\TableStorageSessionStateProvider.cs:line 603Microsoft.Samples.ServiceHosting.AspProviders.TableStorageSessionStateProvider.ReleaseItemExclusive(HttpContext context, String id, Object lockId) in \Azure\AspProviders\TableStorageSessionStateProvider.cs:line 480 INNER_EXCEPTION:System.Data.Services.Client.DataServiceContext.SaveResult.d__1e.MoveNext()

有人遇到过这种情况吗?我发现的唯一有用的信息是这个,但我对此犹豫不决:

If you want to bypass the validation, you can open TableStorageSessionStateProvider.cs, find ReleaseItemExclusive, and modify the code from:

svc.UpdateObject(session);

to:

svc.Detach(session);
svc.AttachTo("Sessions", session, "*");
svc.UpdateObject(session);

来自 here

谢谢!

所以我决定改变这一点:

svc.UpdateObject(session);svc.SaveChangesWithRetries();

对此:

try{ svc.UpdateObject(session);

svc.SaveChangesWithRetries();

}catch{ svc.Detach(session); svc.AttachTo("Sessions", session, "*"); svc.UpdateObject(session);

svc.SaveChangesWithRetries();

}

所以,我会看看它是如何工作的......

最佳答案

我也遇到过这个问题,经过一番调查,当您有多个实例并且您尝试在同一 session 中快速连续调用电话时,这种情况似乎更常见。 (例如,如果您有一个自动完成框并在每次按键时进行 ajax 调用)

出现这种情况是因为当您尝试访问 session 数据时,Web 服务器首先会锁定该 session 。当请求完成时,它会释放锁。对于表服务提供者,它通过更新表中的字段来更新此锁定状态。我认为发生的情况是 Instance1 加载 session 行,然后 Instance2 加载 session 行,Instance1 保存更新的锁定状态,当 Instance2 尝试保存锁定状态时,它会收到错误,因为对象不处于相同状态就像加载时一样(ETag 不再匹配)。

这就是为什么您找到的修复将阻止错误发生,因为通过在 AttachTo 中指定“*”,当 Instance2 尝试保存锁定时,它将关闭 ETag 检查(并覆盖由实例1)。

在我们的情况下,我们已经更改了提供程序,以便我们可以关闭某些路径的 session (给我们带来问题的ajax调用不需要访问 session 数据,也不需要加载图像),这可能是根据导致问题的原因为您提供一个选项。

不幸的是,TableStorageSessionStateProvider 是示例项目的一部分,因此并没有(据我所知,但我很乐意被告知不是)得到 Microsoft 的正式支持。它确实还有其他问题,例如一旦 session 过期,它就不会清理 session 数据,因此最终会在 session 表和 blob 容器中留下大量垃圾,您必须清理其他一些垃圾。方式。

关于asp.net-mvc-2 - asp.net mvc azure "Error accessing the data store!",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3940891/

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