繁体   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