Google Calendar API - 从服务器端获取事件停止工作 - 消息[未找到]位置[ - ]原因[notFound]域[global]

时间:2016-09-21 20:37:41

标签: c# google-api google-calendar-api google-api-dotnet-client service-accounts

我正在从另一个用户管理的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();
    }

1 个答案:

答案 0 :(得分:1)

您获得的404: Not Found表示找不到指定的资源。另一个可能的原因是所请求的资源(使用提供的ID)从未存在或访问用户无法访问的日历。

\f

此处建议的操作使用exponential backoff

关于服务帐户,此SO question可能会对您有所帮助。根据这一点,当使用service account访问私人日历时,如果您拥有包含这些日历的域,则需要执行权限委派,或者您需要与服务帐户的电子邮件地址共享私人日历。