ruby Microsoft Graph V1 API错误:OData::ServerError 503 ConcurrentItemSave:“将数据保存到存储区时发生冲突

fcwjkofz  于 2023-08-04  发布在  Ruby
关注(0)|答案(1)|浏览(73)

使用Microsoft Graph API(v1)将新事件推送到Outlook日历时,我无法调试此问题。我已经测试过了,它仍然可以工作,但是我收到了这个错误,今天在我的Ruby on Rails应用程序中发生了几次,下面的代码片段中提到了gems。并且在这些错误之后有重复的事件添加到日历中。我已经搜索了这个问题,但仍然一无所获。谁能帮我解决这个问题?我只是不知道这个问题是由我的用户的行为引起的,还是仅仅是API服务器错误。非常感谢!
OData::ServerError 503 ConcurrentItemSave:“将数据保存到存储区时发生冲突(保存结果:IrresolvableConflict,属性:)。请重试请求。”来自“https://graph.microsoft.com/v1.0/me/calendars/AAMkADg1YmMzNjE2LTM5Y2MtNGI2NC05NjJjLWRiY2RhZTZkNDRkMABGAAAAAADZc5aq6QclSqy_4oRMVv_EBwB4ZnW6S6xLTZDSXIsgJfprAAAAAAEGAAB4ZnW6S6xLTZDSXIsgJfprAAAGEcjmAAA=/events
我用来通过API创建事件的代码

require 'adal'
require 'microsoft_graph'

username      = ENV["OUTLOOK_USERNAME"]
password      = ENV["OUTLOOK_PASSWORD"]
client_id     = ENV["OUTLOOK_CLIENT_ID"]
client_secret = ENV["OUTLOOK_CLIENT_SECRET"]
tenant        = ENV["OUTLOOK_TENANT"]
user_cred     = ADAL::UserCredential.new(username, password)
client_cred   = ADAL::ClientCredential.new(client_id, client_secret)
context       = ADAL::AuthenticationContext.new(ADAL::Authority::WORLD_WIDE_AUTHORITY, tenant)
resource      = "https://graph.microsoft.com/"
tokens        = context.acquire_token_for_user(resource, client_cred, user_cred)

callback = Proc.new { |r|
  r.headers["Authorization"] = "Bearer #{tokens.access_token}"
  r.headers["Prefer"] = 'outlook.timezone="Australia/Sydney"'
  r.headers['Content-type'] = 'application/json'
}

@graph = MicrosoftGraph.new(
  base_url: "https://graph.microsoft.com/v1.0",
  cached_metadata_file: File.join(MicrosoftGraph::CACHED_METADATA_DIRECTORY, "metadata_v1.0.xml"),
  &callback
)

#example_data
calendar_id = "my_calendar_id"
data = my_event_object

@graph.service.post("me/calendars/#{calendar_id}/events", data.to_json)

字符串

ruyhziif

ruyhziif1#

我也遇到过同样的问题。这实际上是MS端的一个问题,原因是事件对象包含开放的扩展,根据文档,这应该是好的,但实际上每20-30个请求就会导致失败。
我通过将事件创建请求拆分为两个API调用来修复它。第一个请求不包含附加到事件的任何扩展信息,第二个请求将扩展数据添加到新创建的事件,如此处所述。
现在,第二次POST到/extensions可能会失败,但我已经用重试策略 Package 了它,根据我最近的经验,它不需要超过1次重试来完成作业。

相关问题