Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 翻译API用户速率无理由超过[403]限制_C#_Google Translate - Fatal编程技术网

C# 翻译API用户速率无理由超过[403]限制

C# 翻译API用户速率无理由超过[403]限制,c#,google-translate,C#,Google Translate,我通过“google.API.translate.v2”版本1.9.2.410使用带C#代码的google translate API和付费服务 代码类似于: var GoogleService = new Google.Apis.Translate.v2.TranslateService( new BaseClientService.Initializer { ApiKey = Context.ConfigData.GoogleApiKey, ApplicationName

我通过“google.API.translate.v2”版本1.9.2.410使用带C#代码的google translate API和付费服务

代码类似于:

var GoogleService = new Google.Apis.Translate.v2.TranslateService(
 new BaseClientService.Initializer
{
    ApiKey = Context.ConfigData.GoogleApiKey,
    ApplicationName = "Translator"
});
...

  var rqr = GoogleService.Translations.List(item, 'de');
  rqr.Source = "cs";

  var result = await rqr.ExecuteAsync();
此代码例外:

超过用户速率限制[403]错误[消息[用户速率限制] 超出]位置[-]原因[超出UserRateLimit] 域[usageLimits]]

在那之前,从来没有。我的限额是: 总配额 50000个字符/天 剩余
49344849个字符/天 占总数的98,69% 每用户限制
100个请求/秒/用户

请求数肯定少于每秒100个请求
有什么问题吗?

翻译API有一个现有的未记录配额。此配额将每个用户每100秒的字符数限制为10000(也称为10000个字符/100秒/用户)

这意味着,即使您将大文本拆分为不同的请求,也无法在100秒内绕过10000个字符

简要示例:

  • 如果在前5秒内跳过10k个字符,则需要等待95秒才能继续分析字符
  • 如果您在50秒后达到此配额,则需要再等待50秒
  • 如果在第99秒点击,则需要等待1秒才能继续工作
我建议您总是捕获异常,并在执行指数退避时重试多次。其思想是,如果服务器由于达到100秒间隔配额而暂时停机,则在服务器恢复之前,不会被同时命中的请求所淹没(因此会连续返回403个错误)。您可以看到此实践的简要说明(此示例重点介绍驱动器API,但相同的概念适用于每个基于云的服务)


或者,您可以捕获异常,无论何时出现403错误,都可以应用100秒的延迟,然后重试。这不是最省时的解决方案,因为100秒间隔是连续的(在达到配额时不会启动),但它可以确保您不会在同一请求中两次达到限制。

此解决方案不起作用。因此,它起作用,但只是部分起作用。错误计数稍微少一些,但仍然有很多。整个解决方案,即使工作是无用的,因为翻译太长了。我编辑了我的评论,以更好地澄清行为。你想翻译什么?如果您正在分析大型段落,是否适合将其拆分为较小的请求?