我正在从另一个用户管理的CalendarId中检索所有事件,并使用.Net中的服务器端库 Google.Apis.Calendar。* 在我们的网站上显示它们。它持续运作良好,自将近两个月的时间后突然停止工作显示error。 问题是服务帐户确实拥有日历中的所有权限(查看所有详细信息),但在执行请求时停止工作( request.Execute(); )。谁有这个问题的线索?我真的很感激。
public class GCalendarService : Service
{
public GCalendarService(X509Certificate2 certificate, String accountName, String appName) : base(certificate, accountName, appName)
{
this.Scopes = new string[] {
CalendarService.Scope.Calendar, // Manage your calendars
CalendarService.Scope.CalendarReadonly // View your Calendars
};
this.InitializeCredential(certificate);
this.GService = new CalendarService(new BaseClientService.Initializer()
{
HttpClientInitializer = this.Credential,
ApplicationName = appName
});
}
/// <summary>
/// Gets all the events based on a period of time
/// </summary>
/// <param name="calendarId">The ID of the calendar to get the events</param>
/// <param name="minDate">The minimun date to request</param>
/// <param name="maxDate">The max date to request</param>
/// <param name="maxEvents">The max amount of events to retrieve</param>
/// <returns></returns>
public Object GetEvents(string calendarId, DateTime? minDate, DateTime? maxDate, int maxEvents)
{
EventsResource.ListRequest request = ((CalendarService)this.GService).Events.List(calendarId);
request.TimeMin = DateTime.Now;
request.ShowDeleted = false;
request.SingleEvents = true;
request.MaxResults = maxEvents;
request.OrderBy = EventsResource.ListRequest.OrderByEnum.StartTime;
return request.Execute();
}
答案 0 :(得分:1)
您获得的404: Not Found
表示找不到指定的资源。另一个可能的原因是所请求的资源(使用提供的ID)从未存在或访问用户无法访问的日历。
\f
此处建议的操作使用exponential backoff。
关于服务帐户,此SO question可能会对您有所帮助。根据这一点,当使用service account访问私人日历时,如果您拥有包含这些日历的域,则需要执行权限委派,或者您需要与服务帐户的电子邮件地址共享私人日历。