【发布时间】:2017-02-06 01:01:15
【问题描述】:
为了自动更新 Google Fusion Table,我们创建了一个 .NET 控制台应用程序,我们已将从 Google 管理控制台生成和下载的文件 clientsecrets.json 附加到该应用程序。
当我在本地运行应用程序时,会打开一个浏览器窗口以授权将 API 与 OAuth 2.0 一起使用。一旦它授权该过程正确执行。
但是,当我们在要安排您的日常执行的服务器上运行应用程序时,不会打开浏览器窗口并显示“发生一个或多个错误”。
服务器为Windows Server 2012,应用构建于.NET 4.5.1,授权代码如下:
...
var service = new FusiontablesService(new BaseClientService.Initializer
{
ApplicationName = "Fusion Tables Sample",
HttpClientInitializer = Utils.Google.GetCredential().Result
});
...
public static async Task<UserCredential> GetCredential()
{
using (var stream = new FileStream("client_secrets.json", FileMode.Open, FileAccess.Read))
{
return await GoogleWebAuthorizationBroker.AuthorizeAsync(
GoogleClientSecrets.Load(stream).Secrets,
new[] { FusiontablesService.Scope.Fusiontables },
"XXXXXXXXXXXX[user]", CancellationToken.None);
}
}
【问题讨论】:
-
这只是一种预感,但您是否尝试过
HttpClientInitializer = await Utils.Google.GetCredential()而不是强制它同步运行?这是一个常见的异常来源。虽然它在本地运行良好,但您可能需要检查一下。 -
确保您在服务器上运行的任何用户都有权访问 %appData% 默认文件数据存储区将把凭据放在那里,除非您另有说明。
-
我的 FileDatastore 教程可能会有所帮助 daimto.com/google-net-filedatastore-demystified
标签: c# oauth-2.0 google-api google-fusion-tables windows-server-2012-r2