Используя .net core 2+ web api, я пытаюсь создать коллекцию в firestore и добавить в нее документы. Инициализация Cloud Firestore работает нормально и проверена, возвращая результат OK, содержащий идентификатор инициализированного проекта. Но когда я собираюсь создать коллекцию и добавить в нее документ, я начинаю получать сообщение о том, что мой проект не существует.
Чтобы иметь возможность общаться с firestore через мой API, я установил Google.Cloud.Firestore от Google (1.0.0-beta20) от NuGet. Кроме того, у меня уже есть new-project (new-project - это имя проекта firebase), настроенный в консоли firebase. Сервисный ключ для new-project также уже настроен в моей среде - путем предоставления GOOGLE_APPLICATION_CREDENTIALS пути пути сервисного ключа. Первоначально у меня была ошибка «Ошибка разрешения имен», но она исчезла после установки GRPC_DNS_RESOLVER = native в моей среде.
Вот как я общаюсь с пожарным магазином.
var db = FirestoreDb.Create("new-project");
var collectionReference = db.Collection("users");
var docRef1 = collectionReference.Document("alovelace");
var user1 = new Dictionary<string, object>
{
{ "First", "Ada" },
{ "Last", "Lovelace" },
{ "Born", 1815 }
};
await docRef1.SetAsync(user1);
Сообщение об ошибке
RpcException: Status(StatusCode=NotFound, Detail="The project new-project does not exist or it does not contain an active Cloud Datastore or Cloud Firestore database. Please visit http://console.cloud.google.com to create a project or https://console.cloud.google.com/datastore/setup?project=new-project to add a Cloud Datastore or Cloud Firestore database. Note that Cloud Datastore or Cloud Firestore always have an associated App Engine app and this app must not be disabled.")
Трассировка стека
Google.Api.Gax.Grpc.ApiCallRetryExtensions+<>c__DisplayClass0_0<TRequest, TResponse>+<<WithRetry>b__0>d.MoveNext()
Google.Cloud.Firestore.WriteBatch.CommitAsync(ByteString transactionId, CancellationToken cancellationToken) in WriteBatch.cs
Google.Cloud.Firestore.DocumentReference.SetAsync(object documentData, SetOptions options, CancellationToken cancellationToken) in DocumentReference.cs
DashApi.Controllers.ValuesController.Get() in ValuesController.cs
var user1 = new Dictionary<string, object>
{
{ "First", "Ada" },
{ "Last", "Lovelace" },
{ "Born", 1815 }
};
await docRef1.SetAsync(user1); //THIS IS WHAT TRIGGERS THE ERROR.
lambda_method(Closure , object )
Microsoft.Extensions.Internal.ObjectMethodExecutorAwaitable+Awaiter.GetResult()
Microsoft.AspNetCore.Mvc.Internal.ActionMethodExecutor+AwaitableObjectResultExecutor.Execute(IActionResultTypeMapper mapper, ObjectMethodExecutor executor, object controller, object[] arguments)
System.Threading.Tasks.ValueTask<TResult>.get_Result()
Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.InvokeActionMethodAsync()
Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.InvokeNextActionFilterAsync()
Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.Rethrow(ActionExecutedContext context)
Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.Next(ref State next, ref Scope scope, ref object state, ref bool isCompleted)
Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.InvokeInnerFilterAsync()
Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.InvokeNextResourceFilter()
Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.Rethrow(ResourceExecutedContext context)
Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.Next(ref State next, ref Scope scope, ref object state, ref bool isCompleted)
Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.InvokeFilterPipelineAsync()
Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.InvokeAsync()
Microsoft.AspNetCore.Routing.EndpointMiddleware.Invoke(HttpContext httpContext)
Microsoft.AspNetCore.Routing.EndpointRoutingMiddleware.Invoke(HttpContext httpContext)
Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware.Invoke(HttpContext context)
Я следил за документами и ожидаю, что под этой коллекцией вместо ошибки будет коллекция пользователей и документ alovelace.