无法删除使用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.MultiResponseServiceRequest1.Execute() at Microsoft.Exchange.WebServices.Data.ExchangeService.InternalDeleteItems(IEnumerable
itemIds,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上下文中运行时,会有什么关键的区别吗?
编辑2CurrentUser
是用户提供的用户名和密码。Exchange服务器与SharePoint服务器不在同一域中。
编辑3
如果我在outlook中打开约会(使用与CurrentUser
变量中相同的登录名(,我可以取消约会。
最后我们发现问题不在上面的简化示例中
问题是,我们使用了一个"仅查看"帐户来获取日历中的所有约会。然后,当我们尝试使用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
祝好运