【问题标题】:The service is not available received when calling MS Graph API调用 MS Graph API 时服务不可用
【发布时间】:2020-06-18 22:28:52
【问题描述】:

我们正在调用 MS Graph API 来获取团队的 Sharepoint URL。

API 网址:GET https://graph.microsoft.com/v1.0/groups/{GroupID}/sites/root/weburl

我们明白了:

回复:

{
  "error": {
    "code": "serviceNotAvailable",
    "message": "The service is not available. Try the request again after a delay. There may be a Retry-After header.",
    "innerError": {
      "request-id": "9f23d067-e851-4c43-8701-abe137683b87",
      "date": "2020-03-05T13:53:43"
    }
  }
}

可能是什么问题?

【问题讨论】:

  • 您好弗拉德,您可以看到消息状态,该服务不可用。您是否尝试过延迟后尝试请求?就像真的在不同的日子一样?还是几分钟后?
  • 是的,我有,过了一段时间,甚至一天之后。到目前为止,错误消息是相同的

标签: api sharepoint microsoft-graph-api


【解决方案1】:

自 3 月 2 日以来,我在使用 Graph API 搜索网站 (GET /sites?search=*) 时遇到了类似的问题。我一直无法恢复。我在多个 O365 租户中经历过这种情况,包括免费和许可。

Microsoft 文档说此错误代码是由于 MSFT 引起的限制,但我的请求率是每小时 50 个。

这似乎是微软的错误。我为此发布了stack overflow issue,@rafa-ayadi 报告说 MSFT 正在为他的一位客户修复它。

我为此问题购买了 Azure 开发人员支持订阅,但 MSFT 将其关闭并转介我到 Sharepoint 开发人员支持,我找不到任何链接或定价。因此,让 MSFT 承认并为我修复还没有运气。

【讨论】:

    【解决方案2】:

    /** 您需要委托进行身份验证。请参阅以下代码: 首先,您需要从 portal.azure.com 注册应用程序并获得: 文件夹 id 它是tenantID 应用 ID。它是客户 ID **/

    URL urlObj = new             
    URL("https://login.microsoftonline.com/"+config.tenantID+"/oauth2/v2.0/token");
    HttpURLConnection httpCon = (HttpURLConnection) urlObj.openConnection();
    
    String urlParameters = "" + // para la v2.0
       "grant_type"+"="+"password"+"&"+ /
       "scope" + "=" + "https%3A%2F%2Fgraph.microsoft.com%2F.default" +"&" +
       "client_id" + "=" + config.clientId +"&" +
       "client_secret" + "=" + config.clientSecret +"&" +
       "username" + "=" + config.username +"&" +
       "password" + "=" + config.contrasena +"&";
    
    byte[] postData = urlParameters.getBytes( StandardCharsets.UTF_8 );
    int postDataLength = postData.length;
    
    httpCon.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
    httpCon.setRequestProperty("Content-Length",String.valueOf(postDataLength));
    httpCon.setRequestMethod("POST");
    
    httpCon.setDoOutput(true);
    OutputStreamWriter writer = new OutputStreamWriter(httpCon.getOutputStream());
    writer.write(urlParameters);
    writer.flush();
    
    int status = httpCon.getResponseCode();
    
    BufferedReader in = new BufferedReader(new 
       InputStreamReader(httpCon.getInputStream()));
    String inputLine;
    StringBuffer content = new StringBuffer();
    while ((inputLine = in.readLine()) != null) {
       content.append(inputLine);
    }
    in.close();
    String body = getBody(content.toString());
    
    String token = null;
    final ObjectNode node = new ObjectMapper().readValue(body, ObjectNode.class);
    if (node.has("access_token")) {
        token = node.get("access_token").asText();
    }
    httpCon.disconnect();
    
    return token;
    

    【讨论】:

      【解决方案3】:

      我在访问站点 API 中的任何资源时遇到的类似问题是由于同时授予了应用程序类型访问的 Groups.CreateGroups.ReadWrite.All 权限。

      删除 Groups.Create 允许所有 CRUD 调用成功而没有 serviceNotAvailable 错误,即使是仅访问站点的命令行调用。

      如果您更改测试权限,请务必更新管理员授权和您的令牌。

      用户@user13034886 提到了another post 中的权限冲突。

      【讨论】:

        猜你喜欢
        • 2018-11-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-06-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多