使用C#MCV的GMail API超出了用户速率限制

时间:2018-11-20 07:19:07

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

任何人都可以帮助我获得解决方案使用C#MCV应用程序超出GMail API的用户速率限制。自最近5天以来,我一直坚持这一点。互联网上没有文件。谷歌也没有解决方案。我已启用结算功能以访问Google服务。使用类似...的代码

var certificate = new X509Certificate2(AssemblyDirectory + string.Format("\\{0}",CertificateFileName), CertificatePassword, X509KeyStorageFlags.Exportable);

ServiceAccountCredential credential = new ServiceAccountCredential(new ServiceAccountCredential.Initializer(ServiceAccountEmail)
               {
                   Scopes = new[] { GmailService.Scope.GmailModify },
                   User=this.User
               }.FromCertificate(certificate));

 // Create the service.
 service = new GmailService(new BaseClientService.Initializer()
            {
                HttpClientInitializer = credential,
                ApplicationName = this.ApplicationName,
                ApiKey="xxxxxxxxxxxxxxxxxxx",
            }); 

ListLabelsResponse response = service.Users.Labels.List("me").Execute();
Labels = response.Labels.ToList();
if (!Labels.Select(l => l.Name).Contains("Processed"))
    {
         Labels.Add(CreateLabel("Processed"));
    }

1 个答案:

答案 0 :(得分:2)

说明

用户速率限制错误消息是洪水保护。您当前登录的用户(作为您的服务帐户)每分钟/秒只能发出X个请求

enter image description here

如您所见,用户最多可以在100秒内进行25,000个查询。您的应用程序最多可以在100秒内发出2,000,000个请求。 Gmail还具有其他一些限制,可以记录mail sending,但尚未记录。

达到用户速率限制配额时,除了降低应用程序速度之外,您无能为力。

标准错误消息

  

403:超出用户速率限制   已达到每用户限制。这可能是开发者控制台的限制,也可能是云端硬盘后端的限制。

{
 "error": {
  "errors": [
   {
    "domain": "usageLimits",
    "reason": "userRateLimitExceeded",
    "message": "User Rate Limit Exceeded"
   }
  ],
  "code": 403,
  "message": "User Rate Limit Exceeded"
 }
}

建议的操作

使用指数补偿。

  

403:超出速率限制   用户已达到Google Drive API的最高请求速率。该限制取决于请求的类型。

{
 "error": {
  "errors": [
   {
    "domain": "usageLimits",
    "message": "Rate Limit Exceeded",
    "reason": "rateLimitExceeded",
   }
  ],
  "code": 403,
  "message": "Rate Limit Exceeded"
 }
}

建议的操作

使用指数补偿。

实施指数补偿

指数退避是网络应用程序的标准错误处理策略,在该策略中,客户端会在越来越多的时间内定期重试失败的请求。如果大量请求或繁重的网络流量导致服务器返回错误,则指数退避可能是处理这些错误的好策略。相反,这不是处理与速率限制,网络量或响应时间无关的错误(例如无效的授权凭据或找不到文件的错误)的相关策略。

正确使用指数补偿可以提高带宽使用效率,减少获得成功响应所需的请求数量,并在并发环境中最大化请求的吞吐量。

创建请求不是幂等的。简单的重试是不够的,可能会导致实体重复。重试之前,请检查该实体是否存在。

计费

不可能提高用户速率限制,以防止开发人员泛滥Google服务器。 Gmail API是免费的,启用计费不会做太多事情。

注意

如果您通过执行Users.Labels.List("me")来获得此操作,我会感到惊讶,除非您为访问您网站的每个用户运行此代码,而不是缓存数据。