簡體   English   中英

文件上傳時 Microsoft Graph HttpProvider 錯誤

[英]Microsoft Graph HttpProvider Error on File Upload

我有一個 PDF 我需要使用 Microsoft Graph 上傳到 SharePoint 文檔庫。 我的代碼已經成功完成了幾個月,直到它在 4 月 17 日停止工作,我們的 SharePoint 似乎沒有任何變化,當然也不是我的代碼。

我有一個執行上傳的 function:

public static async Task<DriveItem> UploadLargeFile(string localFilePath, string spPath)
    {
        DriveItem uploadedFile = null;
        using (Stream fileStream = System.IO.File.OpenRead(localFilePath))
        {
            UploadSession uploadSession = await GraphAPIConnection.GraphClient.Sites[siteid].Drives[driveid].Root.ItemWithPath(spPath).CreateUploadSession().Request().PostAsync();
            List<Exception> exceptions = new List<Exception>();
            if (uploadSession != null)
            {
                //Chunk size must be divisible by 320KiB, our chunk size will be slightly more than 1MB 
                int maxSizeChunk = (320 * 1024) * 4;
                ChunkedUploadProvider uploadProvider = new ChunkedUploadProvider(uploadSession, GraphAPIConnection.GraphClient, fileStream, maxSizeChunk);
                IEnumerable<UploadChunkRequest> chunkRequests = uploadProvider.GetUploadChunkRequests();
                byte[] readBuffer = new byte[maxSizeChunk];

                //Using one session, upload each chunk of the file individually
                foreach (UploadChunkRequest request in chunkRequests)
                {
                    try
                    {
                        UploadChunkResult result = await uploadProvider.GetChunkRequestResponseAsync(request, readBuffer, exceptions);
                        if (result.UploadSucceeded)
                        {
                            uploadedFile = result.ItemResponse;
                        }
                    }
                    catch (Exception ex)
                    {
                        Debug.WriteLine("message: " + ex.Message + "\t\ttrace: " + ex.StackTrace);
                    }
                }
            }
        }
        return uploadedFile;
    }

我的捕獲產生以下 output:

消息:代碼:generalException 消息:發送請求時發生錯誤。 跟蹤:在 Microsoft.Graph.HttpProvider.d__19.MoveNext() --- 從先前引發異常的位置結束堆棧跟蹤 --- 在 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) 在 System.Runtime。 CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at Microsoft.Graph.HttpProvider.d__18.MoveNext() --- 從先前拋出異常的位置結束堆棧跟蹤---在 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task任務)在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任務任務)在 Microsoft.Graph.UploadChunkRequest.d__17.MoveNext() --- 在 System.Runtime 中從先前引發異常的位置結束堆棧跟蹤。 CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at Microsoft.Graph.UploadChunkRequest.d__16.MoveNext() --- 從 p 結束堆棧跟蹤拋出異常的過往位置 --- 在 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) 在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) 在 Microsoft.Graph.ChunkedUploadProvider.d__17.MoveNext() - -- 從先前引發異常的位置結束堆棧跟蹤 --- 在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) 在 System.Runtime.CompilerServices 在 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) .TaskAwaiter`1.GetResult() 在 MyNameSpace.SharePointUploader.d__9.MoveNext() 在 MyDir\SharePointUploader.cs:line 173

如你看到的,

uploadProvider.GetChunkRequestResponseAsync(request, readBuffer, exceptions)

導致以下產生錯誤:

在 Microsoft.Graph.HttpProvider.d__19.MoveNext()

我仔細檢查了 function 的所有輸入是否有效; 幾個月來,代碼也沒有任何變化。 我嘗試了第三方 ETL 軟件,並且能夠將 PDF 上傳到我想要的文件夾 - 該軟件也是使用 Microsoft Graph 構建的。

這就是我難過的地方。 我如何進一步調試它以確定 HttpProvider 拋出錯誤的確切原因?

找到了解決方法。 分兩部分回答。

如何更好地調試這樣的問題(我是如何找到它的,以防我下面的解決方案對您沒有幫助)

  • 在發生錯誤的地方設置斷點。
  • 在 Visual Studio 調試選項中進行以下設置。 這將允許您像這樣進入 (F11)庫,以便更好地了解正在發生的事情。 在此處輸入圖像描述
  • 運行代碼直到斷點行。
  • 打開調試“Locals”window。
  • 按 F11 進入出現錯誤的行。
  • 展開嵌套的“內部異常”變量以獲得更詳細的錯誤。

解決問題

  • 使用上面的調試導致我出現以下錯誤“無法從傳輸連接中讀取數據:連接已被遠程主機關閉”(遠程主機是 SharePoint)。
  • SharePoint 已棄用舊 TLS。 使用較舊的 .NET 框架意味着 1.2 在您的代碼中可能不是默認的。 歸功於: 無法從傳輸連接讀取數據:現有連接被遠程主機強行關閉
  • 只需將您的項目框架更新到 4.7.2 或更高版本即可強制執行 TLS 1.2。 SharePoint 主機現在應該接受連接,並且不會被您的應用程序關閉。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM