У нас проблема с удалением встреч из Exchange с помощью EWS.
Мы пытаемся удалить встречи из Exchange, как это
ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2007_SP1);
service.Credentials = CurrentUser; // NetworkCredential
service.Url = new Uri(WebserviceAddress);
service.UseDefaultCredentials = false;
var appointment = Appointment.Bind(service, id);
deletedAppointment.Delete(DeleteMode.MoveToDeletedItems, SendCancellationsMode.SendToAllAndSaveCopy);
Мы получаем исключение с сообщением «Объект не может быть удален».
Microsoft.Exchange.WebServices.Data.ServiceResponseException is
пойман Сообщение = Объект не может быть удален.
Source = Microsoft.Exchange.WebServices StackTrace:
в
Microsoft.Exchange.WebServices.Data.ServiceResponse.InternalThrowIfNecessary ()
в
Microsoft.Exchange.WebServices.Data.MultiResponseServiceRequest 1.Execute()
at
Microsoft.Exchange.WebServices.Data.ExchangeService.InternalDeleteItems(IEnumerable
1
itemIds, DeleteMode deleteMode, Nullable 1 sendCancellationsMode,
Nullable
1 disabledTaskOccurferences, ServiceErrorHandling
обработка ошибок)
в
Microsoft.Exchange.WebServices.Data.ExchangeService.DeleteItem (ItemId
itemId, DeleteMode deleteMode, Nullable 1 sendCancellationsMode,
Nullable
1 затрагиваемых заданий задачи)
в
Microsoft.Exchange.WebServices.Data.Item.InternalDelete (DeleteMode
deleteMode, Nullable 1 sendCancellationsMode, Nullable
1
affectedTaskOccurrences)
в
Microsoft.Exchange.WebServices.Data.Appointment.Delete (DeleteMode
deleteMode, SendCancellationsMode sendCancellationsMode)
в
OurNameSpace.ExchangeCalendar.ViewCalendars.ExchangeMethods.DeleteMeeting (ItemId
id) InnerException:
Если вместо этого мы попытаемся использовать отмену собрания
deletedAppointment.CancelMeeting();
мы получаем исключение с сообщением «Пользователь должен быть организатором действия CancelCalendarItem». Это меня очень смущает, потому что когда я проверяю объект deletedAppointment
, мой адрес электронной почты устанавливается как организатор.
Мы создаем наши встречи вот так
Appointment appointment = new Appointment(service);
appointment.Subject = subject;
appointment.Body = body;
appointment.Start = start;
appointment.End = end;
appointment.Location = location;
appointment.RequiredAttendees.Add(location);
appointment.RequiredAttendees.Add(requiredAttendees);
try
{
appointment.Save(SendInvitationsMode.SendOnlyToAll);
}
catch ...
location
содержит имя почтового ящика конференц-зала.
если мы сделаем паузу на некоторое время (до тех пор, пока встреча не появится в Outlook) и не вызовем кнопку «Удалить» в том же экземпляре встречи, который мы использовали при создании встречи, встреча удаляется успешно.
Код выполняется в пользовательской веб-части SharePoint 2010. Не то чтобы я мог подумать, что это что-то изменит, но кто знает?
Почему я не могу удалить встречу?
Как я могу продолжить расследование?
Насколько я могу судить, код в основном копирует и вставляет пример MSDN.
Редактировать
Когда я копирую минимальный пример кода в приложение Winform, собрание удаляется правильно. Может ли быть какая-либо критическая разница при работе в контексте Sharepoint?
Редактировать 2
CurrentUser
- это пользовательское имя пользователя и пароль. Сервер Exchange не находится в том же домене, что и сервер SharePoint.
Редактировать 3
Если я открываю встречу в Outlook (с тем же логином, что и в переменной CurrentUser
), я могу отменить встречу.