【发布时间】:2013-02-06 07:24:03
【问题描述】:
问题
我需要能够使用 Exchange 托管 API 从会议室获取约会数据。我已经运行了大约一个月的服务,通过使用ExchangeService.GetUserAvailability() 可以很好地达到此目的,如下所示:
private IEnumerable<CalendarEvent> GetEvents(ExchangeService ExchangeService, string room, DateTime time, DateTime end)
{
List<AttendeeInfo> attendees = new List<AttendeeInfo>();
end = new DateTime(time.Ticks + Math.Max(end.Ticks - time.Ticks, time.AddDays(1).Ticks - time.Ticks));
AttendeeInfo roomAttendee = new AttendeeInfo();
roomAttendee.AttendeeType = MeetingAttendeeType.Room;
roomAttendee.SmtpAddress = GetEmailAddress(room);
attendees.Add(roomAttendee);
Collection<CalendarEvent> events = ExchangeService.GetUserAvailability(
attendees,
new TimeWindow(time, end),
AvailabilityData.FreeBusy
).AttendeesAvailability[0].CalendarEvents;
return (from e in events
where e.EndTime > time
select e);
}
但是,我最近不得不扩展这项服务来执行一些需要更长时间跨度(从一天到几个月)的其他任务。这种方法随着时间的增加变得非常低效,并且当结果太多时偶尔会抛出错误。
问题
这是解决此问题的最有效方法吗?我没有找到更好的方法,但我将不胜感激。
【问题讨论】:
-
请注意,GetEmailAddress() 是一个本地函数,它从配置文件中获取电子邮件后缀并添加到末尾。
标签: .net wcf calendar exchange-server ews-managed-api