我使用 MS Graph 进行概念验证。当我尝试使用 Microsoft Graph REST API (v1.0) 为我的 Excel 工作簿创建会话时,我得到了一个
错误 500 FileOpenBaseDocumentCheckOperationFailed
{
"error": {
"code": "FileOpenBaseDocumentCheckOperationFailed",
"message": "Service is unavailable. Please try again.",
"innerError": {
"request-id": "6419d49f-60b6-4273-8be3-78f422d02a76",
"date": "2019-08-28T14:40:00"
}
}
}
它在多次尝试后有时会起作用,所以我想知道这是 Microsoft Graph REST API 服务器状态的问题还是我的源代码有问题?我遵循 MS 文档并使用提供的模板。
当我使用 Microsoft Graph Explorer 网站时,我总是得到status = 201
(创建)并且得到workbook-session-id
.
我在亚太地区,所以我可以从控制台标题响应中看到我正在使用东亚的数据中心。也许 Graph Explorer 网站正在使用东亚以外的另一个特殊数据中心,所以它更稳定?
x-ms-ags-diagnostic: {"ServerInfo":{"DataCenter":"East Asia","Slice":"SliceC","Ring":"4","ScaleUnit":"000","RoleInstance":"AGSFE_IN_1","ADSiteName":"EAS"}}
这是我的源代码:
因此,为了“强制”获取,如果或workbook-session-id
,我再次调用callMSGraph
函数本身。status = 500
409
httpMethod="POST"
theUrl="https://graph.microsoft.com/v1.0/sites/{sharepoint_id}/drive/items/{item_id}/workbook/createSession"
function callMSGraph(httpMethod, theUrl, accessToken, callback) {
var xmlHttp = new XMLHttpRequest();
xmlHttp.onreadystatechange = function () {
if (this.readyState == 4) {
if (this.status == 200 || this.status == 201) {
callback(JSON.parse(this.responseText), httpMethod);
} else {
if (this.status == 500 || this.status == 409) {
callMSGraph(httpMethod, theUrl, accessToken, callback);
return false;
}
console.log("[" + this.status + "] Error: " + JSON.parse(this.responseText));
}
}
}
xmlHttp.open(httpMethod, theUrl, true); // true for asynchronous
xmlHttp.setRequestHeader('Authorization', 'Bearer ' + accessToken);
xmlHttp.setRequestHeader("Content-Type", "application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8");
xmlHttp.setRequestHeader("persistChanges", "true");
if (httpMethod === "POST") {
xmlHttp.send();
return false;
}
}
我希望在第一次或第二次尝试中获得成功,但有时我在获得(创建)workbook-session-id
之前尝试了 10 次甚至更多次。status 201
有时我尝试了更多,然后它失败了,因为它尝试了太多次。
链接到 Graph Explorer https://developer.microsoft.com/en-us/graph/graph-explorer
任何想法都会受到赞赏,因为我想让会话创建的请求可靠。我没有找到有关此错误消息的任何信息:
FileOpenBaseDocumentCheckOperationFailed
GET
否则,对于其他带有or的命令,我不会遇到任何问题PATCH
。