Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 无法删除使用exchange web服务的会议_C#_.net_Sharepoint_Exchange Server_Exchangewebservices - Fatal编程技术网

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

C# 无法删除使用exchange web服务的会议,c#,.net,sharepoint,exchange-server,exchangewebservices,C#,.net,Sharepoint,Exchange Server,Exchangewebservices,使用EWS从Exchange删除约会时出现问题 我们尝试像这样从Exchange中删除约会 ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2007_SP1); service.Credentials = CurrentUser; // NetworkCredential service.Url = new Uri(WebserviceAddress); service.UseDefaultCredent

使用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);
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 ...
我们收到一条异常消息“无法删除对象”

Microsoft.Exchange.WebServices.Data.ServiceResponseException被删除 捕获的消息=无法删除对象。
Source=Microsoft.Exchange.WebServices StackTrace: 在 Microsoft.Exchange.WebServices.Data.ServiceResponse.InternalThrowIfNecessary()文件 在 Microsoft.Exchange.WebServices.Data.MultiResponseServiceRequest
1.Execute()
在
Microsoft.Exchange.WebServices.Data.ExchangeService.InternalDeleteItems(IEnumerable
1 ItemId、DeleteMode、DeleteMode、Nullable
1 sendCancellationsMode、,
可为Null
1影响task发生,服务错误处理 错误处理) 在 Microsoft.Exchange.WebServices.Data.ExchangeService.DeleteItem(ItemId itemId,DeleteMode DeleteMode,Nullable
1 sendCancellationsMode,
可为空
1受影响的任务发生) 在 Microsoft.Exchange.WebServices.Data.Item.InternalDelete(删除模式 deleteMode,可空
1发送取消模式,可空
1
受影响的事件(发生)
在
Microsoft.Exchange.WebServices.Data.Appointment.Delete(删除模式
deleteMode,SendCancellationsMode SendCancellationsMode)
在
OurNameSpace.ExchangeCalendar.ViewCalendars.ExchangeMethods.DeleteMeeting(ItemId
id)内部异常:

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

deletedAppointment.CancelMeeting();
“用户必须是CancelCalendarItem操作的组织者”消息出现异常。这让我非常困惑,因为当我检查
DeletedApoint
对象时,我的电子邮件地址被设置为组织者

我们创建这样的会议

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);
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 ...
位置
包含会议室邮箱的名称。
如果我们暂停一段时间(直到约会出现在Outlook中),并在创建会议时使用的同一约会实例上调用Delete,则约会将成功删除

该代码在自定义SharePoint 2010 Web部件中运行。我不认为这会有什么不同,但谁知道呢

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

编辑
当我将代码的最小示例复制到Winform应用程序时,会议被正确删除。在Sharepoint上下文中运行时是否会有任何关键差异

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

编辑3

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

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

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

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

Set-MailboxFolderPermission -Identity MeetingRoom1@test.com:\Calendar -User Default -AccessRights Reviewer

Set-MailboxFolderPermission -Identity MeetingRoom2@test.com:\Calendar -User administrator@test.com  -AccessRights Owner

祝你好运

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


无论如何,感谢您尝试提供帮助。

sharepoint上下文会更改权限等。-Exchange看到的标识与在Winforms应用程序上看到的标识不同。。。保护所需的身份和/或显式使用管理用户连接到Exchange…@Yahia,我想我还不太清楚是否在
CurrentUser
变量中提供了特定于用户的Exchange凭据,以及Exchange服务器与SharePoint服务器不在同一个域中。仅此一点是不行的-我的解释似乎不清楚。。。选中此项,然后在连接到Exchange之前模拟相应的用户,然后以您目前的方式连接到Exchange…向我们的Exchange管理员请求一个具有权限的帐户来打乱整个公司的每个日历是不允许的。您能详细说明“每个Exchange对象的日历”部分吗。如果我以我的帐户和会议室帐户作为与会者创建会议,是否不允许我以我的帐户从会议室日历中删除约会?我想我对Exchange在创建会议时如何在不同日历中分配约会有点迷茫。