1

я получаю много ошибок, связанных с кодом ответа ErrorIrresolvableConflict при попытке создать событиеErrorIrresolvableConflict при создании события

Stack Trace - at Microsoft.OData.ProxyExtensions.DataServiceContextWrapper.<SaveChangesAsync>d__5e.MoveNext() 
--- End of stack trace from previous location where exception was thrown --- 
    at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) 
    at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) 
    at Office365CalendarProviderBL.<>c__DisplayClass7_0.<<CreateCalendarEvent>b__0>d.MoveNext() - Inner Exception - Microsoft.OData.Client.DataServiceRequestException: An error occurred while processing this request. ---> Microsoft.OData.Client.DataServiceClientException: {"error":{"code":"ErrorIrresolvableConflict","message":"The send or update operation could not be performed because the change key passed in the request does not match the current change key for the item."}} 
    --- End of inner exception stack trace --- 
    at Microsoft.OData.Client.SaveResult.HandleResponse() 
    at Microsoft.OData.Client.BaseSaveResult.EndRequest() 
    at Microsoft.OData.Client.DataServiceContext.EndSaveChanges(IAsyncResult asyncResult) 
    at System.Threading.Tasks.TaskFactory`1.FromAsyncCoreLogic(IAsyncResult iar, Func`2 endFunction, Action`1 endAction, Task`1 promise, Boolean requiresSynchronization) 
--- End of stack trace from previous location where exception was thrown --- 
    at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) 
    at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) 
    at Microsoft.OData.ProxyExtensions.DataServiceContextWrapper.<SaveChangesAsync>d__5e.MoveNext() 

Я получаю это сообщение с этим исключение - операции отправки или обновления не может быть выполняется, поскольку ключ изменения, переданный в запросе, не соответствует текущему ключу изменения для элемента.

  1. Пожалуйста, объясните, что такое ключ изменения и как он работает?
  2. Я получаю эти исключения только со вчерашнего дня и не изменил никакого кода. Нужно ли мне обновлять что-либо в конце или я ничего не пропускаю?

Я использую V1 DLL - https://api.office.com/discovery/v1.0/me/ ProxyExtension Version - 23

Код: -

// In this method, we are populating event properties later used to create event on calendar. Please verify if I am missing any important property here 
private Event CreateCalEventObj(CalendarMeetingBL meeting, string location, meetingAdditionalDataBL data) 
{ 
    Event calEvent = new Event(); 
    try 
    { 
     calEvent.Subject = WEB.HttpUtility.HtmlDecode(meeting.MeetingName); 
     calEvent.ShowAs = FreeBusyStatus.Busy; 
     if (meeting.EventAlarmInMinutes == -1) 
      meeting.EventAlarmInMinutes = null; 
     calEvent.Reminder = meeting.EventAlarmInMinutes; 
     calEvent.Start = meeting.StartTime; 
     calEvent.End = meeting.EndTime; 
     calEvent.StartTimeZone = meeting.TimeZoneString; 
     calEvent.EndTimeZone = meeting.TimeZoneString; 

     if (!string.IsNullOrEmpty(location) && location.Length <= 500) 
     { 
      calEvent.Location = new Microsoft.Office365.OutlookServices.Location() 
      { 
       DisplayName = CommonBL.FixLineBreakForGooglelocation(WEB.HttpUtility.HtmlDecode(location.Replace("\n", " "))) 
      }; 
     } 
     else if (!string.IsNullOrEmpty(data.Phone)) 
     { 
      calEvent.Location = new Microsoft.Office365.OutlookServices.Location() 
      { 
       DisplayName = "Phone: " + CommonBL.FixLineBreakForGooglelocation(WEB.HttpUtility.HtmlDecode(data.Phone)) 
      }; 
     } 
     else if (!string.IsNullOrEmpty(data.MobileNumber)) 
     { 
      calEvent.Location = new Microsoft.Office365.OutlookServices.Location() 
      { 
       DisplayName = "Mobile: " + CommonBL.FixLineBreakForGooglelocation(WEB.HttpUtility.HtmlDecode(data.MobileNumber)) 
      }; 
     } 
     calEvent.Body = new ItemBody() 
     { 
      Content = CommonBL.RevertLineBreakPlaceHolder((WEB.HttpUtility.HtmlDecode(meeting.MeetingDetails.Replace(@"\\\", "\\")))) 
     }; 
    } 
    catch (Exception ex) 
    { 
     BLFactory.CurrentInstance.LoggingBLObj.InsertLog("Insert logging here"); 
     calEvent = null; 
    } 
    return calEvent; 
} 

// In this method we are creating event on calendar. 
private string CreateCalendarEvent(CalendarMeetingBL meeting, List<ParticipantBL> invitees, string username, string calendarId, OutlookServicesClient service, string location, meetingAdditionalDataBL data, string meetingId = "-1") 
{ 
    var taskCreateMeeting = Task<string>.Run(
      async() => 
      { 
       Event calEvent = CreateCalEventObj(meeting, location, data); 
       if (calEvent != null) 
       { 
        try 
        { 
         //Add invitees to the event 
         foreach (ParticipantBL inviteeItem in invitees) 
         { 
          if (!inviteeItem.IsAdditional) 
          { 
           calEvent.Attendees.Add(new Attendee() 
           { 
            EmailAddress = new EmailAddress() 
            { 
             Address = inviteeItem.Email.Replace("&#39;", "'"), 
             Name = inviteeItem.Name 
            }, 
            Type = AttendeeType.Required, 
            Status = new ResponseStatus() 
            { 
             Response = ResponseType.Accepted, 
             Time = DateTime.Now 
            } 
           }); 
          } 
         } 
        } 
        catch (Exception ex) 
        { 
         BLFactory.CurrentInstance.LoggingBLObj.InsertLog(meeting.MeetingId, username, "Locally User ID is Meeting id AND email is username - Scheduling Logging Exception 3 - Stack Trace - " + ex.StackTrace + " - Inner Exception - " + ex.InnerException + " - meetingObjValues - " + meetingObjValues + " - meetingAdditionalDataObjValues - " + meetingAdditionalDataObjValues + " - username - " + username + " - calendarId - " + calendarId + " - location - " + location + " - meetingId - " + meetingId, meeting.MeetingId); 
         return "-1"; 
        } 

        try 
        { 

         var providerDefault = (String.IsNullOrEmpty(calendarId) ? service.Me.Events : service.Me.Calendars[calendarId].Events); 
         await providerDefault.AddEventAsync(calEvent);   // We are getting Exception here but Event is created in calendar      
         return calEvent.Id;          // Event object is not updated after exception 
        } 
        catch (Exception ex) 
        { 
         BLFactory.CurrentInstance.LoggingBLObj.InsertLog("Insert exception logging here"); 
         return "-1"; 
        } 
       } 
       else 
        return "-1"; 
      } 
     ); 
    Task.WaitAll(taskCreateMeeting); 
    string id = taskCreateMeeting.Result; 
    return id; 
} 

Исключение мы получаем это типа Microsoft.OData.Client.DataServiceRequestException но не попал под выделенный блок блокировки

   catch (Microsoft.OData.Client.DataServiceRequestException ex) 
       { 
        BLFactory.CurrentInstance.LoggingBLObj.InsertLog("Insert logging here"); 
        return "-1"; 
       } 

Сообщите мне, если anyt hing else требуется Спасибо в Advance.

+0

Полезно сузить эту проблему, если вы делитесь образцом кода. –

+0

@FeiXue Я обновил образец кода. Пожалуйста, взгляните и дайте мне знать, если вам все еще нужно что-нибудь. –

+0

Is ** calendarId ** null или пустое в коде 'var providerDefault = (String.IsNullOrEmpty (calendarId)? Service.Me.Events: service.Me.Calendars [calendarId] .Events);'? Я также предлагаю вам отслеживать детали ошибки с помощью ** Fiddler **, чтобы увидеть детальную ошибку. –

ответ

0

Это не связано непосредственно с OData - мы видели то же самое с EWS. Мы только что нашли основное условие гонки внутри кода Exchange, которое вызывало это, и один из наших разработчиков только что проверил в исправлении для этого. Таким образом, он должен начать быстро развертываться в производстве.

В коде нет ничего плохого, что могло бы вызвать его для нового элемента.

+0

Спасибо Дэвиду за обновление. Можете ли вы посмотреть и на другой вопрос? http://stackoverflow.com/questions/41478331/office-365-default-calendars-id-changes-automatically Этот вопрос относится к более высокому приоритету для нас. –

+0

Я только начал испытывать это, но с обновлениями к категориям сообщений. Кажется, это началось 17 марта 2017 года для нас. –