microsoft-graph-api - 来自 GraphClient 的 PostDocument 引发异常 - 无法建立 SSL 连接
问题描述
我正在使用 MS GraphClient 使用 Microsoft 文档中的标准代码发布文档。我在 .NET Core 3.1 的 REST API 中的 Startup.ConfigureServices() 方法中设置 TLS1.2,如下所示。
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
我在发布文档调用之前获得了带有客户端令牌的授权。发布文档的代码片段是
int maxSlice = 320 * 1024;
using var stream = new MemoryStream(Convert.FromBase64String(document.FileContent));
var uploadSession = await graphclient.Drives[driveId].Items[driveItemId].ItemWithPath("File_Name").CreateUploadSession().Request().PostAsync();
var fileUploadTask = new LargeFileUploadTask<DriveItem>(uploadSession, stream, maxSlice);
UploadResult<DriveItem> uploadResult = await fileUploadTask.UploadAsync();
var fileUploaded = uploadResult.ItemResponse;
我能够获取 uploadSession,但是当它尝试执行 UploadAsync() 时,它会引发 SSL 连接失败。这种情况偶尔发生。如果发送了一系列 5 到 8 个文档,则其中一个或两个因 SSL 连接失败而失败。为每个要上传的文档获取一个具有授权的类的新实例。应用程序部署在 IIS 中,内存增加到一个非常好的数量。服务器可用内存超过 5GB。服务器和共享点之间的防火墙很好,没有看到任何网络呼叫中断的问题。但不知道 Microsoft Graphclient 是否有任何已知问题。
任何帮助表示赞赏。
下面是异常的堆栈跟踪
Status Code: 0
Microsoft.Graph.ServiceException: Code: generalException
Message: An error occurred sending the request.
---> System.Net.Http.HttpRequestException: The SSL connection could not be established, see inner exception.
---> System.IO.IOException: Unable to read data from the transport connection: An existing connection was forcibly closed by the remote host..
---> System.Net.Sockets.SocketException (10054): An existing connection was forcibly closed by the remote host.
--- End of inner exception stack trace ---
at System.Net.Sockets.Socket.AwaitableSocketAsyncEventArgs.ThrowException(SocketError error, CancellationToken cancellationToken)
at System.Net.Sockets.Socket.AwaitableSocketAsyncEventArgs.GetResult(Int16 token)
at System.Net.FixedSizeReader.ReadPacketAsync(Stream transport, AsyncProtocolRequest request)
at System.Net.Security.SslStream.InternalEndProcessAuthentication(LazyAsyncResult lazyResult)
at System.Net.Security.SslStream.EndProcessAuthentication(IAsyncResult result)
at System.Net.Security.SslStream.EndAuthenticateAsClient(IAsyncResult asyncResult)
at System.Net.Security.SslStream.<>c.<AuthenticateAsClientAsync>b__65_1(IAsyncResult iar)
at System.Threading.Tasks.TaskFactory`1.FromAsyncCoreLogic(IAsyncResult iar, Func`2 endFunction, Action`1 endAction, Task`1 promise, Boolean requiresSynchronization)
--- End of stack trace from previous location where exception was thrown ---
at System.Net.Http.ConnectHelper.EstablishSslConnectionAsyncCore(Stream stream, SslClientAuthenticationOptions sslOptions, CancellationToken cancellationToken)
--- End of inner exception stack trace ---
at System.Net.Http.ConnectHelper.EstablishSslConnectionAsyncCore(Stream stream, SslClientAuthenticationOptions sslOptions, CancellationToken cancellationToken)
at System.Net.Http.HttpConnectionPool.ConnectAsync(HttpRequestMessage request, Boolean allowHttp2, CancellationToken cancellationToken)
at System.Net.Http.HttpConnectionPool.CreateHttp11ConnectionAsync(HttpRequestMessage request, CancellationToken cancellationToken)
at System.Net.Http.HttpConnectionPool.GetHttpConnectionAsync(HttpRequestMessage request, CancellationToken cancellationToken)
at System.Net.Http.HttpConnectionPool.SendWithRetryAsync(HttpRequestMessage request, Boolean doRequestAuth, CancellationToken cancellationToken)
at System.Net.Http.DiagnosticsHandler.SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
at Microsoft.Graph.RedirectHandler.SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
at Microsoft.Graph.RetryHandler.SendAsync(HttpRequestMessage httpRequest, CancellationToken cancellationToken)
at Microsoft.Graph.CompressionHandler.SendAsync(HttpRequestMessage httpRequest, CancellationToken cancellationToken)
at Microsoft.Graph.AuthenticationHandler.SendAsync(HttpRequestMessage httpRequestMessage, CancellationToken cancellationToken)
at System.Net.Http.HttpClient.FinishSendAsyncBuffered(Task`1 sendTask, HttpRequestMessage request, CancellationTokenSource cts, Boolean disposeCts)
at Microsoft.Graph.SimpleHttpProvider.SendRequestAsync(HttpRequestMessage request, HttpCompletionOption completionOption, CancellationToken cancellationToken)
--- End of inner exception stack trace ---
at Microsoft.Graph.SimpleHttpProvider.SendRequestAsync(HttpRequestMessage request, HttpCompletionOption completionOption, CancellationToken cancellationToken)
at Microsoft.Graph.SimpleHttpProvider.SendAsync(HttpRequestMessage request, HttpCompletionOption completionOption, CancellationToken cancellationToken)
at Microsoft.Graph.UploadSliceRequest`1.SendRequestAsync(Stream stream, CancellationToken cancellationToken, HttpCompletionOption completionOption)
at Microsoft.Graph.UploadSliceRequest`1.PutAsync(Stream stream, CancellationToken cancellationToken)
at Microsoft.Graph.LargeFileUploadTask`1.UploadSliceAsync(UploadSliceRequest`1 uploadSliceRequest, ICollection`1 exceptionTrackingList)
at Microsoft.Graph.LargeFileUploadTask`1.UploadAsync(IProgress`1 progress, Int32 maxTries)
解决方案
推荐阅读
- typescript - TypeScript 至少需要一个属性
- python - 尽管安装了所有先决条件,TensorFlow 并未使用 GPU
- gradle-kotlin-dsl - 在 gradle kts 项目中使用 buildSrc 跨子项目共享类型化变量
- linux - mac 终端命令输出在结尾“%”处给出特殊字符
- git - 身份验证问题 Argo CD 与 Azure DevOps Server 2020 - Git Repo
- matlab - 输入数据大小与 net.inputs 大小不匹配
- linux - 安装在 Linux OL8 上的 Tomcat 和 Apex 上时 Oracle ORDS 的正确位置
- apple-push-notifications - 如何使用新的 APNS HTTP2 流程让 Apple Pass 更新正常工作?
- flutter - 颤振等待未来按钮点击被忽略
- powershell - 具有成员、GroupCategory、GroupScope 的递归直接报告