【问题标题】:Can't connect Firebase Cloud Firestore from C# .NET Core app无法从 C# .NET Core 应用程序连接 Firebase Cloud Firestore
【发布时间】:2020-01-27 18:05:00
【问题描述】:

我正在尝试设置一个非常简单的测试应用程序来连接到我的 Firebase Cloud Firestore 实例。

这是一个在 Windows 7 上使用 .NET Core 3.0 的 C# .NET Core 控制台应用程序

我只是尝试使用我的项目名称连接到我的 Firestore 实例。

我的 GOOGLE_APPLICATION_CREDENTIALS 环境变量设置为 C:\test\creds.json,这是我使用 GCP Console 页面上的“创建密钥”功能为我的默认服务帐户创建的。

当我运行下面的代码时,我收到以下错误:

using Google.Cloud.Firestore;
using System;

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            FirestoreDb db = FirestoreDb.Create("my-proj-id");
        }
    }
}

例外:

应用程序默认凭据不可用。他们是 如果在 Google Compute Engine 中运行,则可用。否则, 必须定义环境变量 GOOGLE_APPLICATION_CREDENTIALS 指向定义凭据的文件。看 https://developers.google.com/accounts/docs/application-default-credentials 了解更多信息。'

当我运行 ProcessMonitor 来检测文件系统活动时,我的应用程序甚至从未尝试触摸 creds.json 文件,这让我相信 C# Cloud Firestore API 甚至没有找到我的 creds 文件。我已经在用户和系统级别设置了 GOOGLE_APPLICATION_CREDENTIALS 环境变量。

我的配置方式有问题吗?

【问题讨论】:

  • 你是怎么得到GOOGLE_APPLICATION_CREDENTIALS的?你能记录这个string value = Environment.GetEnvironmentVariable("GOOGLE_APPLICATION_CREDENTIALS);
  • 我没有读取环境变量。根据此链接 (firebase.google.com/docs/firestore/quickstart),在您的开发人员环境中,您只需将 GOOGLE_APPLICATION_CREDENTIALS 设置为密钥文件位置即可对任何请求进行身份验证。
  • @LinkedListT 仅供参考,在 powershell "[System.Environment]::GetEnvironmentVariable("GOOGLE_APPLICATION_CREDENTIALS")" 中生成我的凭据文件的正确路径
  • 您实际上是以该用户身份运行的吗? (我们没有任何关于你如何运行它的上下文。)
  • 我很困惑。这是 Windows 上的 .NET Core 3.0 控制台应用程序。我以域用户身份登录到 Windows,不确定这是否重要。 Google 开发人员文档说要从 Google Cloud Console 创建一个安全密钥(JSON 文件 - c:\test\creds.json)。我为“App Engine 默认服务帐户”创建了一个密钥,该密钥在 GCP 控制台中列为服务帐户。根据 Google 文档,我将 GOOGLE_APPLICATION_CREDENTIALS 设置为“c:\test\creds.json”。当我尝试从 C# 访问我的实例时,它基本上说找不到凭据,但我看不到 c:\temp\creds.json 的磁盘活动

标签: c# firebase google-cloud-firestore


【解决方案1】:

这真是令人抓狂。我试图在我的应用程序中记录 GOOGLE_APPLICATION_CREDENTIALS 环境变量值,它是null。我重新启动了 Visual Studio,它开始工作了。我的理论是 VS 在启动调试器进程时将当前环境传递给被调试者,或者它可能使用其中一个 Visual Studio 调试器主机代理进程进行调试,并且在我重新启动 IDE 后重新启动它

【讨论】:

    【解决方案2】:

    有时,Visual Studio 运行的环境可能与 Windows 中 PATH ENV 变量的范围不同。我认为这与管理员权限有关。以管理员身份打开 Visual Studio 执行任务和 GOOGLE_APPLICATION_CREDENTIALS 分配会很有趣。

    似乎这种行为是意料之中的。 C# .net MVC, set path to Google Application Credentials JSON file

    【讨论】:

    • 我相信它就像我的应用从 Visual Studio 继承环境变量一样简单。如果在设置环境变量之前启动 Visual Studio,则需要重新启动 Visual Studio 以获取更改。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-18
    • 2020-08-11
    • 1970-01-01
    • 2020-06-26
    • 1970-01-01
    • 2020-02-01
    相关资源
    最近更新 更多