.Net Core API调用Microsoft Graph API遇Excel工作簿会话暂停无效会话报错
错误原因分析
- 异步创建会话时序异常:创建会话时添加了
Prefer: respond-async异步请求头,接口会在后台会话完全初始化完成前就提前返回会话ID,此时立即携带该ID发起后续请求,就会偶发会话无效的错误,和实际请求耗时无关 - 会话ID请求头格式错误:后续请求传递
workbook-session-id头时,额外给会话ID包裹了大括号,Graph API要求该头直接传入原始会话ID字符串,多余的大括号可能导致部分请求解析会话ID失败 - 服务端瞬态故障:Excel Online的会话调度存在极低概率的瞬态错误,即使所有配置正确,也可能出现会话被提前回收的情况
修复方案
- 改为同步创建会话:移除创建会话时的异步请求头,确保接口返回会话ID时后台资源已经完全就绪
WorkbookSessionInfo res = await _graphServiceClient.Groups[_groupId].Drive.Items[productStructureCalculator.CalculatorId].Workbook .CreateSession(persistChanges) .Request() .PostAsync();
- 修正会话ID请求头格式:去掉会话ID外层的大括号,直接传入原始值
.Header("workbook-session-id", sessionId)
- 新增错误重试逻辑:捕获
invalidSessionReCreatable类型的错误后,自动重新创建会话再重试原请求,重试次数设置为2-3次即可覆盖绝大多数瞬态故障 - 优化会话生命周期管理:不要跨多个并发请求复用同一个会话ID,单次计算任务独立创建会话,任务完成后主动调用
CloseSession接口释放资源,避免会话被后台误判为空闲回收
内容的提问来源于stack exchange,提问作者Wynand Coetzer
相关产品推荐
相关产品推荐

