繁体   English   中英

Microsoft Graph API - 获取 Sharepoint 文档库中的项目列表时超时 (C# ASP DotNet)

[英]Microsoft Graph API - Timeout while getting list of items in Sharepoint Document Library (C# ASP DotNet)

我正在使用 Microsoft Graph API 获取 Sharepoint 文档库中的文档列表。 代码可以使用 6 个月。 上周五我的密码坏了。

库中大约有 700 个文档,过去请求会在 5-6 秒后完成。 截至上周五(2022 年 9 月 23 日),它开始超时(约 120 秒)。 如果我将它限制为 200 行,它会在 12 秒后工作,但我需要所有 700 行,如果有一种方法可以进行分页。 然后我可以制定自己的方法。 另外,如果我可以增加超时时间,它可能会起作用——我尝试将 GraphClient.HttpProvider.OverallTimeout 和请求 WithMaxRetry 修改为 900 秒。 但它仍然在大约 122 秒后超时。

这是我的代码的相关部分(rowLimit 是一个设置为 5000 的整数):

List<QueryOption> queryOptions = new List<QueryOption>()
            {
                new QueryOption("Top", $"{rowLimit}"),
                new QueryOption ("Prefer","allowthrottleablequeries")
            };

IDriveItemChildrenCollectionPage result = await GraphClient.Sites[siteID].Drives[documentLibraryID].Root.Children
                    .Request(queryOptions)
                    .Expand("listItem")
                    .WithMaxRetry(1) //set 1 max retry and set timeout
                    .WithMaxRetry(TimeSpan.FromSeconds(900)
                    .GetAsync();

~122 秒后,我收到以下异常:代码:tooManyRetries 消息:发送请求时重试次数超过 1 次。

如前所述,如果我限制行数,我可以让它工作——200 行在大约 12 秒内返回,400 行在大约 24 秒内返回。 奇怪的是上周还不错,所以也许微软改变了什么?

我设法通过使用分页来解决我的问题:

List<DriveItem> allItems = new();

var result = await GraphClient.Sites[siteID].Drives[documentLibraryID].Root.Children
                .Request()
                .Expand("listItem")
                .Top(100)
                .GetAsync();

            var pageIterator = PageIterator<DriveItem>
                .CreatePageIterator(
                    GraphClient,
                    result,
                    (item) =>
                    {
                        allItems.Add(item);
                        return true;
                    });

            await pageIterator.IterateAsync();

这样我一次得到 100 个结果,这在超时阈值内。 然后将它们全部添加到列表 (allItems) 中,因此我不需要更改代码的 rest。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM