![](/img/trans.png)
[英]Work with Excel file using Sharepoint document library with Microsoft Graph API
[英]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.