如何从EWS中检索公共日历?

时间:2014-01-06 10:20:53

标签: c# exchangewebservices exchange-server-2010

我们通过交换管理我们的汽车池预订。每辆车都有一个日历,您可以在车上预约使用它。

我的任务是检索每辆车的日历和每次预约,但我仍然坚持如何通过EWS拨打正确的电话。

我的步骤如下:

  • 创建Exchange服务
  • 使用服务帐户凭据
  • AutodiscoverUrl()
  • 创建CalenderFolder,CalenderView并检索约会。

现在我的问题位于“检索约会”,因为我只能通过其WellKnownFolders访问我自己的日历。

如何访问其他公共calanders并检索他们的约会?

这是我目前使用的代码:(从http://msdn.microsoft.com/en-us/library/office/dn439786(v=exchg.80).aspx收集)

ServicePointManager.ServerCertificateValidationCallback = CertificateValidationCallBack;

ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2010_SP1);
service.Credentials = new WebCredentials(@"domain\svc_account", @"Dummypassword");
service.UseDefaultCredentials = false;
service.TraceEnabled = true;
service.TraceFlags = TraceFlags.All;
service.AutodiscoverUrl(@"svc_account@domain.com", RedirectionUrlValidationCallback);

DateTime startTime = DateTime.Now;
DateTime endTime = DateTime.Now.AddDays(10);
int num_appts = 10;

CalendarFolder calFolder = CalendarFolder.Bind(service, WellKnownFolderName.Calendar, new PropertySet());
CalendarView calView = new CalendarView(startTime, endTime, 10);
calView.PropertySet = new PropertySet(AppointmentSchema.Subject, AppointmentSchema.Start, AppointmentSchema.End);

FindItemsResults<Appointment> appointments = calFolder.FindAppointments(calView);

foreach (Appointment a in appointments)
{
    //Do stuff later on...
}

再次:这适用于我的日历中的约会。我无法在MSDN中找到有关如何访问其他人数据的部分。

2 个答案:

答案 0 :(得分:3)

查看Exchange Impersonation

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

string impName = @"impy";
string impPassword = @"password";
string impDomain = @"domain";
string impEmail = @"impy@domain.com";

ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2010);
service.Credentials = new NetworkCredential(impName, impPassword, impDomain);
service.AutodiscoverUrl(impEmail);

// This will work as if you are that car.
service.ImpersonatedUserId = new ImpersonatedUserId(ConnectingIdType.SmtpAddress, @"CAR1@domain.com");

更多参考资料: http://msdn.microsoft.com/en-us/library/dd633680(v=exchg.80).aspx

答案 1 :(得分:2)

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

// 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);