无法删除使用exchange web服务的会议

本文关键字:web 服务 会议 exchange 删除 | 更新日期: 2023-09-27 18:06:48

使用EWS从Exchange删除约会时出现问题。

我们尝试从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为catchtMessage=无法删除对象
源=Microsoft.Exchange.WebServices堆栈跟踪:在Microsoft.Exchange.WebServices.Data.ServiceResponse.InteralThrowIfNecessary((在Microsoft.Exchange.WebServices.Data.MultiResponseServiceRequest 1.Execute() at Microsoft.Exchange.WebServices.Data.ExchangeService.InternalDeleteItems(IEnumerableitemIds,DeleteMode DeleteMode,可为空的1 sendCancellationsMode, Nullable 1 affectedTaskOccurrences,ServiceErrorHandling错误处理(在Microsoft.Exchange.WebServices.Data.ExchangeService.DeleteItem(ItemIditemId,DeleteMode DeleteMode,可为空的1 sendCancellationsMode, Nullable 1 affectedTaskOccurrences(在Microsoft.Exchange.WebServices.Data.Item.InteralDelete(DeleteModedeleteMode,可为空的1 sendCancellationsMode, Nullable 1受影响的任务发生次数(在Microsoft.Exchange.WebServices.Data.Appointment.Delete(DeleteModedeleteMode,SendCancellationsMode sendCancellationsMod(在OurNameSpace.ExchangeCalendar.ViewCalendars.ExchangeMethods.DeleteMeeting(ItemIdid(内部异常:

如果我们尝试使用取消会议

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中(,并在创建会议时使用的同一个约会实例上调用Delete,则约会将被成功删除。

代码在自定义SharePoint 2010 Web部件中运行。我并没有想到这会有什么不同,但谁知道呢?

为什么我不能删除约会
如何进一步调查
据我所见,代码主要是MSDN示例的复制粘贴。

编辑
当我将代码的最小示例复制到Winform应用程序时,会议将被正确删除。在Sharepoint上下文中运行时,会有什么关键的区别吗?

编辑2
CurrentUser是用户提供的用户名和密码。Exchange服务器与SharePoint服务器不在同一域中。

编辑3
如果我在outlook中打开约会(使用与CurrentUser变量中相同的登录名(,我可以取消约会。

无法删除使用exchange web服务的会议

最后我们发现问题不在上面的简化示例中
问题是,我们使用了一个"仅查看"帐户来获取日历中的所有约会。然后,当我们尝试使用CurrentUser凭据删除约会时,我们尝试使用该约会id,但该id在新用户的上下文中无效
当我们改为使用CurrentUser检索日历项而不是仅查看帐户时,一切都开始工作。

无论如何,谢谢你的帮助。

执行删除操作的用户必须具有足够的权限才能从特定资源/用户的日历中删除会议。

在SharePoint的情况下,web部件代码将在当前登录用户(从代码中可见(下运行。但是,当前登录用户可能没有足够的权限在每个Exchange对象的日历上执行操作。我建议设置一个专用的Active Directory用户,该用户将执行代码中的调用,同时具有操作每个Exchange Server对象(用户或资源(的日历项的完全访问权限。

以下是一些有用的PowerShell Scriptlet,用于设置用户的权限并再次执行删除操作。

Set-MailboxFolderPermission -Identity MeetingRoom1@test.com:'Calendar -User Default -AccessRights Reviewer
Set-MailboxFolderPermission -Identity MeetingRoom2@test.com:'Calendar -User administrator@test.com  -AccessRights Owner

祝好运