Сохранение встречи с EWS приводит к System.ArgumentException: элемент с тем же ключом уже был добавлен. Ключ: Dlt / 1916 - PullRequest
0 голосов
/ 24 октября 2019

Я пытаюсь что-то новое и получил старый проект, работающий с EWS (Exchange WebService), и я пытаюсь отладить, поскольку в настоящее время он работает неправильно. Я получаю следующую ошибку:

fail: Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware[1]
      An unhandled exception has occurred while executing the request.
System.ArgumentException: An item with the same key has already been added. Key: Dlt/1916
   at System.Collections.Generic.Dictionary`2.TryInsert(TKey key, TValue value, InsertionBehavior behavior)
   at Microsoft.Exchange.WebServices.Data.TimeZoneTransitionGroup.InitializeFromAdjustmentRule(AdjustmentRule adjustmentRule, TimeZonePeriod standardPeriod)
   at Microsoft.Exchange.WebServices.Data.TimeZoneDefinition..ctor(TimeZoneInfo timeZoneInfo)
   at Microsoft.Exchange.WebServices.Data.ExchangeServiceBase.get_TimeZoneDefinition()
   at Microsoft.Exchange.WebServices.Data.ServiceRequestBase.WriteToXml(EwsServiceXmlWriter writer)
   at Microsoft.Exchange.WebServices.Data.ServiceRequestBase.EmitRequest(IEwsHttpWebRequest request)
   at Microsoft.Exchange.WebServices.Data.ServiceRequestBase.BuildEwsHttpWebRequest()
   at Microsoft.Exchange.WebServices.Data.ServiceRequestBase.ValidateAndEmitRequest(IEwsHttpWebRequest& request)
   at Microsoft.Exchange.WebServices.Data.MultiResponseServiceRequest`1.Execute()
   at Microsoft.Exchange.WebServices.Data.ExchangeService.InternalCreateItems(IEnumerable`1 items, FolderId parentFolderId, Nullable`1 messageDisposition, Nullable`1 sendInvitationsMode, ServiceErrorHandling errorHandling)
   at Microsoft.Exchange.WebServices.Data.Item.InternalCreate(FolderId parentFolderId, Nullable`1 messageDisposition, Nullable`1 sendInvitationsMode)
   at Microsoft.Exchange.WebServices.Data.Appointment.Save(FolderId destinationFolderId, SendInvitationsMode sendInvitationsMode)
   at SomeClassNameAndSomePath:TaskController.cs:line 246
   at lambda_method(Closure , Object , Object[] )
   at Microsoft.Extensions.Internal.ObjectMethodExecutor.Execute(Object target, Object[] parameters)
   at Microsoft.AspNetCore.Mvc.Internal.ActionMethodExecutor.SyncActionResultExecutor.Execute(IActionResultTypeMapper mapper, ObjectMethodExecutor executor, Object controller, Object[] arguments)
   at Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.InvokeActionMethodAsync()
   at Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.InvokeNextActionFilterAsync()
   at Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.Rethrow(ActionExecutedContext context)
   at Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted)
   at Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.InvokeInnerFilterAsync()
   at Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.InvokeNextExceptionFilterAsync()
   at Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.Rethrow(ExceptionContext context)
   at Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted)
   at Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.InvokeNextResourceFilter()
   at Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.Rethrow(ResourceExecutedContext context)
   at Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted)
   at Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.InvokeFilterPipelineAsync()
   at Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.InvokeAsync()
   at Microsoft.AspNetCore.Builder.RouterMiddleware.Invoke(HttpContext httpContext)
   at Microsoft.AspNetCore.Authentication.AuthenticationMiddleware.Invoke(HttpContext context)
   at Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware.Invoke(HttpContext context)
warn: Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware[2]
      The response has already started, the error page middleware will not be executed.
Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware:Error: An unhandled exception has occurred while executing the request.

Я получаю это, когда пытаюсь создать простую встречу в Outlook 365. Код выглядит так:

var mainCalendarItem = new Appointment(service) {
                    Subject = "test",
                    Body = "we have something here"
};
mainCalendarItem.Save(mainCalendar.Id, SendInvitationsMode.SendToNone);

Кажется, что вся информация действительна, API, кажется, работает, но я сейчас работаю второй день, чтобы выяснить, в чем причина. Любая помощь приветствуется. Заранее спасибо.

Некоторые отзывы о календаре: он пуст. Я использую последнюю версию библиотеки EWS : enter image description here

Некоторое время я думал, что нашел решение, но как только установил TimeZoneInfo (часовой пояс), отличный от UTC, ошибка возвращается.

Поскольку я уже опубликовал решение, я снова удалил его, это было сообщение:

https://social.msdn.microsoft.com/Forums/exchange/en-US/fff93bb4-bbb7-4646-a704-4131040ffe4b/ews-managed-api-argument-exception-on-reading-calendar-items?referrer=https://social.msdn.microsoft.com/Forums/exchange/en-US/fff93bb4-bbb7-4646-a704-4131040ffe4b/ews-managed-api-argument-exception-on-reading-calendar-items?forum=exchangesvrdevelopment

кто-то, что-то рассказывал о часовом поясе, вызывал у него проблему, а также, за моим исключением, что-то было в часовом поясе, я изменил инициализацию ExchangeService на один с часовым поясом UTC:

var service = new ExchangeService(ExchangeVersion.Exchange2013_SP1, TimeZoneInfo.Utc)

1 Ответ

0 голосов
/ 06 ноября 2019

Наличие точно такой же проблемы. .Save работает, если я создал экземпляр ExchangeService в UTC, но назначение назначается в UTC вместо локального. К какому решению вы пришли?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...