c# - Google Datastore 身份验证问题 - C#

标签 c# google-cloud-platform google-cloud-datastore google-authentication

我正在尝试使用服务帐户凭据文件(我根据文档创建)连接到我帐户上的 Google 数据存储区,但我在尝试插入实体时遇到身份验证错误:

Grpc.Core.RpcException: Status(StatusCode=Unauthenticated, Detail="Exception occured in metadata credentials plugin.")

我的代码是:

var db = DatastoreDb.Create("myprojectid");
Entity entity = new Entity{
 Key = db.CreateKeyFactory("mykindname").CreateIncompleteKey()
};
var keys = await db.InsertAsync(new[] { entity });

GOOGLE_APPLICATION_CREDENTIALS 变量引用凭据文件,当调用 GoogleCredential.GetApplicationDefaultAsync() 以查看凭据对象是否有效时,它看起来确实不错...

我看到一些早期的示例将 GetApplicationDefaultAsync 函数与一些 DatastoreService 对象一起使用 - 但我在最新的版本中找不到 DatastoreService 对象(可能它在旧版本中存在...) .Net API:Google.Cloud.Datastore.V1

请注意,我不想使用其他身份验证方法:

1) 使用 gcloud 客户端。

2) 从 Google 环境(例如应用引擎)运行。

知道如何解决这个问题吗?

最佳答案

在 Jon Skeet 的大力帮助下,问题得以解决。

如果您没有引用所有必需的数据存储 dll,则可能会出现身份验证问题。确保在运行数据存储调用的项目中引用了所有 dll。

我已通过 NuGet 将 Google 数据存储库添加到我的测试项目中,一切正常!

请注意,在这种情况下,建议启用 gRPC 日志记录。 `(例如:GrpcEnvironment.SetLogger(new ConsoleLogger()),您可能会看到加载多个 dll 时是否存在问题...

关于c# - Google Datastore 身份验证问题 - C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42759933/

相关文章:

c# - 将值添加到行、检索它们并拆分它们

google-cloud-platform - 无需停机即可将实时域切换到 Google Cloud Run

php - Laravel 与谷歌云数据存储

python - 在 Google Cloud 函数中运行 gsutil 命令

python - 单例的替代品?

python - 复制 AppEngine 查询对象以创建过滤器的变体,而不影响基本查询

c# - 在 ASP.NET 中设置 DropDownList 的值

c# - 一次性将 ReadOnlySpan 复制到 Span

c# - 如何将公共(public)抽象类的子类化限制为同一程序集中的类型,从而允许将 protected 成员类型化为内部类型

google-app-engine - 部署 App Engine 应用程序时出现错误消息 "service cloudbuilt.googleapis.com is not for consumer..."