Microsoft Graph V1 API エラー: OData::ServerError 503 ConcurrentItemSave: “保存するデータを保存中に競合が発生しました
概要
この問題を検索しましたが、まだ何も見つかりません。誰かこの問題のデバッグを手伝ってくれませんか?Microsoft Graph API (v1) を使用して新しいイベントを Outlook カレンダーにプッシュするときに問題が発生するため、デバッグに問題があります。この問題がユーザーのアクションによって引き起こされたのか、それとも単に API サーバーのエラーによって引き起こされたのかはわかりません。テストしましたが、まだ動作していますが、以下のコードスニペットに記載されている gem を使用した Ruby on Rails アプリから今日数回発生したこのエラーを受け取りました。どうもありがとう!これらのエラーの後、カレンダーに重複したイベントが追加されます。
OData::ServerError 503 ConcurrentItemSave: “データを保存中に競合が発生しました (保存結果: IrresolvableConflict、プロパティ: )。リクエストを再試行してください。” 「https://graph.microsoft.com/v1.0/me/calendars/AAMkADg1YmMzNjE2LTM5Y2MtNGI2NC05NjJjLWRiY2RhZTZkNDRkMABGAAAAAADZc5aq6QclSqy_4oRMVv_EBwB4ZnW6S6xLTZDSXIsgJfprAAAAAAEGAAB4ZnW6S」より6xLTZDSXIsgJfprAAAGEcjmAAA=/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)
解決策
私も同じ問題に直面しました。これは実際には MS 側の問題であり、その理由はイベント オブジェクトにオープン拡張機能が含まれていたためでした。ドキュメントによればこれは問題ないはずですが、実際には 20 ~ 30 リクエストごとにエラーが発生します。
イベント作成リクエストを 2 つの API 呼び出しに分割することで問題を修正しました。最初のリクエストにはイベントに添付された拡張情報が含まれておらず、2 番目のリクエストでは、ここで説明されているように、新しく作成されたイベントに拡張データが追加されます。
/extensions への 2 回目の POST は同じエラーで失敗する可能性がありますが、再試行ポリシーをラップしたので、最近の経験によれば、ジョブを完了するのに 1 回以上の再試行は必要ありません。