Как исправить ошибку "FileOpenBaseDocumentCheckOperationFailed" 500 при попытке создать сеанс (Drive Excel Workbook))
Я работаю над проверкой концепции, используя MS Graph. Когда я пытаюсь создать сеанс для моей книги Excel с Microsoft Graph REST API (v1.0), я получаю
ошибка 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
,
Я нахожусь в APAC, поэтому по отклику заголовка консоли я вижу, что я использую центр обработки данных в Восточной Азии. Может быть, веб-сайт 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
или же PATCH
,