C# 如何从EWS检索公共日历?

C# 如何从EWS检索公共日历?,c#,exchangewebservices,exchange-server-2010,C#,Exchangewebservices,Exchange Server 2010,我们正在通过exchange为我们的汽车池管理预订。每辆车都有一个日历,你可以在上面插入一个预约,以便在你想使用它的时候使用 我的任务是检索每辆车的日历和其中的每一个约会,但我一直在思考如何通过EWS拨打正确的电话 我的步骤如下: 创建Exchange服务 使用服务帐户的凭据 AutodiscoverUrl() 创建日历文件夹、日历视图和检索约会 ? 现在我的问题是“检索约会”,因为我只能用自己熟悉的日历文件夹访问日历 我如何访问其他公共Calander并检索他们的约会 这是我目前正在使用的

我们正在通过exchange为我们的汽车池管理预订。每辆车都有一个日历,你可以在上面插入一个预约,以便在你想使用它的时候使用

我的任务是检索每辆车的日历和其中的每一个约会,但我一直在思考如何通过EWS拨打正确的电话

我的步骤如下:

  • 创建Exchange服务
  • 使用服务帐户的凭据
  • AutodiscoverUrl()
  • 创建日历文件夹、日历视图和检索约会
  • ?
现在我的问题是“检索约会”,因为我只能用自己熟悉的日历文件夹访问日历

我如何访问其他公共Calander并检索他们的约会

这是我目前正在使用的代码:(收集自)

ServicePointManager.ServerCertificateValidationCallback=CertificateValidationCallBack;
ExchangeService服务=新的ExchangeService(ExchangeVersion.Exchange2010_SP1);
service.Credentials=新的WebCredentials(@“域\svc_帐户”,“Dummypassword”);
service.UseDefaultCredentials=false;
service.TraceEnabled=true;
service.TraceFlags=TraceFlags.All;
service.AutodiscoverUrl(@“svc_account@domain.com,重定向UrlValidationCallback);
DateTime startTime=DateTime.Now;
DateTime endTime=DateTime.Now.AddDays(10);
int num_appts=10;
CalendarFolder calFolder=CalendarFolder.Bind(服务,WellKnownFolderName.Calendar,新属性集());
CalendarView calView=新日历视图(开始时间,结束时间,10);
calView.PropertySet=newpropertyset(appointschema.Subject,appointschema.Start,appointschema.End);
FindItemsResults约会=calFolder.FindAppoints(calView);
foreach(预约中的预约)
{
//以后再做。。。
}
再说一次:这对我日历中的约会很有效。我在MSDN中找不到有关如何访问其他人数据的部分。

请查看

您可以让特定的用户帐户模拟另一个用户帐户并访问其详细信息,而无需输入用户名和密码。这也适用于资源日历

string impName=@“impy”;
字符串impPassword=@“password”;
字符串impDomain=@“域”;
字符串impEmail=@”impy@domain.com";
ExchangeService服务=新的ExchangeService(ExchangeVersion.Exchange2010);
service.Credentials=新的网络凭据(impName、IMPASSWORD、IMPDOMIN);
服务。自动发现URL(电子邮件);
//这就好像你就是那辆车一样。
service.ImpersonatedUserId=新的ImpersonatedUserId(ConnectingIdType.SmtpAddress,@”CAR1@domain.com");
更多参考资料:

看一看

您可以让特定的用户帐户模拟另一个用户帐户并访问其详细信息,而无需输入用户名和密码。这也适用于资源日历

string impName=@“impy”;
字符串impPassword=@“password”;
字符串impDomain=@“域”;
字符串impEmail=@”impy@domain.com";
ExchangeService服务=新的ExchangeService(ExchangeVersion.Exchange2010);
service.Credentials=新的网络凭据(impName、IMPASSWORD、IMPDOMIN);
服务。自动发现URL(电子邮件);
//这就好像你就是那辆车一样。
service.ImpersonatedUserId=新的ImpersonatedUserId(ConnectingIdType.SmtpAddress,@”CAR1@domain.com");
更多参考资料:

如果服务用户具有对给定用户日历的读取权限,您可以执行以下操作:

// this is the user whose calendar you want to access
var emailAddress = "user@mydomain.com";

var mailbox = new Mailbox(emailAddress);
var folderId = new FolderId(WellKnownFolderName.Calendar, mailbox);
var calendar = CalendarFolder.Bind(service, 
                                   folderId, 
                                   BasePropertySet.FirstClassProperties);

如果服务用户具有对给定用户日历的读取权限,则可以执行以下操作:

// this is the user whose calendar you want to access
var emailAddress = "user@mydomain.com";

var mailbox = new Mailbox(emailAddress);
var folderId = new FolderId(WellKnownFolderName.Calendar, mailbox);
var calendar = CalendarFolder.Bind(service, 
                                   folderId, 
                                   BasePropertySet.FirstClassProperties);

我正在验证您的答案,但我需要等待,直到管理员授予服务帐户以用户身份模拟的适当权限。我正在验证您的答案,但我需要等待,直到管理员授予服务帐户以用户身份模拟的适当权限。我不断遇到“指定的文件夹不存在”。我还在调查。此技术是否还需要启用模拟?如果这是Office 365的共享日历,则拒绝访问。检查凭据并重试。无法查找请求的条目ID。我不断遇到“指定的文件夹不存在”。我还在调查。此技术是否还需要启用模拟?如果这是Office 365的共享日历,则拒绝访问。检查凭据并重试。无法查找请求的条目ID。