值不能为空。参数名称:baseUri

时间:2015-06-18 07:40:55

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

我在C#控制台应用程序中使用带有服务帐户授权的Google BigQuery API。

当我尝试加载CSV作业时,它会抛出“值不能为空。 参数名称:baseUri “异常。它仅针对单个表,当我更改表名时,它都可以正常工作。

这是堆栈跟踪:

at Microsoft.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at Microsoft.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccess(Task task)
   at Microsoft.Runtime.CompilerServices.TaskAwaiter.ValidateEnd(Task task)
   at Microsoft.Runtime.CompilerServices.ConfiguredTaskAwaitable`1.ConfiguredTaskAwaiter.GetResult()
   at Google.Apis.Upload.ResumableUpload`1.<UploadCoreAsync>d__e.MoveNext() in c:\code\google.com\google-api-dotnet-client\default\Tools\Google.Apis.Release\bin\Debug\test\default\Src\GoogleApis\Apis\[Media]\Upload\ResumableUpload.cs:line 459

工作上传代码:

JobsResource.InsertMediaUpload InsertMediaUpload = new obsResource.InsertMediaUpload(BigQueryService, Job, Job.JobReference.ProjectId, fileStream, "application/octet-stream"); 
var JobInfo = InsertMediaUpload.UploadAsync();

HTTP Request & Response from Fiddler

感谢。

1 个答案:

答案 0 :(得分:1)

我设法找到问题的根本原因和解决方案。

实际错误:表架构不匹配。

原因:在大查询表中,字段模式是必需的。我从此查询的响应“选择*从表名限制1 ”获取表模式,因为无法构建新模式。当我从查询响应中获取表模式时,字段模式更改为NULLABLE。这就是我得到Schema Mismatch的原因。

Google Developers的问题:

  1. 当我们从Response获取架构时,为什么所有字段模式都是NULLABLE
  2. 为什么Google API没有返回实际错误,它只是抛出一个常见的错误声明,需要fiddler才能获得实际错误,然后我们将如何解决生产问题。在生产环境中也需要小提琴手吗?这没有意义。
  3. 开发人员建议:

    使用Fiddler工具获取实际错误。在我的情况下,我从检查员标签下的 Textview 中收到实际错误。希望这篇文章也有帮助。

    感谢。