Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc AWS DynamoDB会话表不断增长,can';不要删除过期的会话_Asp.net Mvc_Session State_Aws Sdk - Fatal编程技术网

Asp.net mvc AWS DynamoDB会话表不断增长,can';不要删除过期的会话

Asp.net mvc AWS DynamoDB会话表不断增长,can';不要删除过期的会话,asp.net-mvc,session-state,aws-sdk,Asp.net Mvc,Session State,Aws Sdk,ASP.NET_SessionState表一直在增长,已经达到18GB,没有删除过期会话的迹象 我们已尝试执行DynamoDBSessionStateStore.DeleteExpiredSessions,但似乎没有效果 我们的系统运行良好,创建了会话,最终用户没有意识到这个问题。然而,桌子一直在增长是没有意义的。。。 我们已经对权限/安全性进行了三次检查,似乎一切正常。我们使用SDK版本3.1.0。还有什么需要检查的呢?由于您的表超过了18 GB,这相当大(在本文中),因此在查看GitHub上

ASP.NET_SessionState表一直在增长,已经达到18GB,没有删除过期会话的迹象

我们已尝试执行DynamoDBSessionStateStore.DeleteExpiredSessions,但似乎没有效果

我们的系统运行良好,创建了会话,最终用户没有意识到这个问题。然而,桌子一直在增长是没有意义的。。。
我们已经对权限/安全性进行了三次检查,似乎一切正常。我们使用SDK版本3.1.0。还有什么需要检查的呢?

由于您的表超过了18 GB,这相当大(在本文中),因此在查看GitHub上的方法代码后,这一点并不奇怪

代码如下:


注意:我没有测试上面的代码,但它只是对开放源代码的简单修改,因此应该可以正常工作,但需要进行测试,以确保分页在扫描记录时被删除的表上正确工作。

我向AWS提交了一个请求,以修复其代码中的此错误:感谢@JaredHatfield,这是对工作原理的非常好的了解!!我们接受了pull请求,并将版本3.1.0.2推出到NuGet
    public static void DeleteExpiredSessions(IAmazonDynamoDB dbClient, string tableName)
    {
        LogInfo("DeleteExpiredSessions");
        Table table = Table.LoadTable(dbClient, tableName, DynamoDBEntryConversion.V1);


        ScanFilter filter = new ScanFilter();
        filter.AddCondition(ATTRIBUTE_EXPIRES, ScanOperator.LessThan, DateTime.Now);

        ScanOperationConfig config = new ScanOperationConfig();
        config.AttributesToGet = new List<string> { ATTRIBUTE_SESSION_ID };
        config.Select = SelectValues.SpecificAttributes;
        config.Filter = filter;

        DocumentBatchWrite batchWrite = table.CreateBatchWrite();
        Search search = table.Scan(config);

        do
        {
            List<Document> page = search.GetNextSet();
            foreach (var document in page)
            {
                batchWrite.AddItemToDelete(document);
            }
        } while (!search.IsDone);

        batchWrite.Execute();
    }
    public static void DeleteExpiredSessions(IAmazonDynamoDB dbClient, string tableName)
    {
        LogInfo("DeleteExpiredSessions");
        Table table = Table.LoadTable(dbClient, tableName, DynamoDBEntryConversion.V1);


        ScanFilter filter = new ScanFilter();
        filter.AddCondition(ATTRIBUTE_EXPIRES, ScanOperator.LessThan, DateTime.Now);

        ScanOperationConfig config = new ScanOperationConfig();
        config.AttributesToGet = new List<string> { ATTRIBUTE_SESSION_ID };
        config.Select = SelectValues.SpecificAttributes;
        config.Filter = filter;

        Search search = table.Scan(config);

        do
        {
            // Perform a batch delete for each page returned
            DocumentBatchWrite batchWrite = table.CreateBatchWrite();
            List<Document> page = search.GetNextSet();
            foreach (var document in page)
            {
                batchWrite.AddItemToDelete(document);
            }
            batchWrite.Execute();
        } while (!search.IsDone);
    }