我在 .Net Core v3.1 中有这个简单的控制台程序:
static void Main(string[] args)
{
var db = new DatastoreDbBuilder
{
ProjectId = "simple-proj",
EmulatorDetection = EmulatorDetection.EmulatorOnly
}.Build();
var keyFactory = db.CreateKeyFactory("Simple");
using (var transaction = db.BeginTransaction())
{
transaction.Insert(new Entity { Key = keyFactory.CreateIncompleteKey(), ["Message"] = "Hello" });
transaction.Commit();
}
}
我正在使用Google.Cloud.Datastore.V1 v3.0.0库从我的 C# 代码访问数据存储区。如文档所述,我启动了模拟器并使用$(gcloud beta emulators datastore env-init)设置环境变量。当我通过浏览器访问它时,我从模拟器端点 (http://localhost:8081) 收到一条 OK 消息。一切似乎都井然有序。
这是我在 .Net 控制台上得到的堆栈转储:
Unhandled exception. Grpc.Core.RpcException: Status(StatusCode=Unavailable, Detail="failed to connect to all addresses")
at Grpc.Core.Internal.AsyncCall`2.UnaryCall(TRequest msg)
at Grpc.Core.Calls.BlockingUnaryCall[TRequest,TResponse](CallInvocationDetails`2 call, TRequest req)
at Grpc.Core.DefaultCallInvoker.BlockingUnaryCall[TRequest,TResponse](Method`2 method, String host, CallOptions options, TRequest request)
at Grpc.Core.Interceptors.InterceptingCallInvoker.<BlockingUnaryCall>b__3_0[TRequest,TResponse](TRequest req, ClientInterceptorContext`2 ctx)
at Grpc.Core.ClientBase.ClientBaseConfiguration.ClientBaseConfigurationInterceptor.BlockingUnaryCall[TRequest,TResponse](TRequest request, ClientInterceptorContext`2 context, BlockingUnaryCallContinuation`2 continuation)
at Grpc.Core.Interceptors.InterceptingCallInvoker.BlockingUnaryCall[TRequest,TResponse](Method`2 method, String host, CallOptions options, TRequest request)
at Google.Cloud.Datastore.V1.Datastore.DatastoreClient.BeginTransaction(BeginTransactionRequest request, CallOptions options)
at Google.Api.Gax.Grpc.ApiCall.GrpcCallAdapter`2.CallSync(TRequest request, CallSettings callSettings)
at Google.Api.Gax.Grpc.ApiCallRetryExtensions.<>c__DisplayClass1_0`2.<WithRetry>b__0(TRequest request, CallSettings callSettings)
at Google.Api.Gax.Grpc.ApiCall`2.<>c__DisplayClass10_0.<WithCallSettingsOverlay>b__1(TRequest req, CallSettings cs)
at Google.Api.Gax.Grpc.ApiCall`2.Sync(TRequest request, CallSettings perCallCallSettings)
at Google.Cloud.Datastore.V1.DatastoreClientImpl.BeginTransaction(BeginTransactionRequest request, CallSettings callSettings)
at Google.Cloud.Datastore.V1.DatastoreClient.BeginTransaction(String projectId, CallSettings callSettings)
at Google.Cloud.Datastore.V1.DatastoreDbImpl.BeginTransaction(CallSettings callSettings)
at simple.Simple.Main(String[] args) in /Users/wreid/git/leapsystems/research/console-reports/Simple.cs:line 20
这是相应的 Datastore 模拟器控制台消息:
[datastore] Jul 24, 2020 5:48:42 PM io.gapi.emulators.grpc.GrpcServer$3 operationComplete
[datastore] INFO: Adding handler(s) to newly registered Channel.
[datastore] Jul 24, 2020 5:48:42 PM io.gapi.emulators.netty.HttpVersionRoutingHandler channelRead
[datastore] INFO: Detected non-HTTP/2 connection.
[datastore] Jul 24, 2020 5:48:42 PM io.gapi.emulators.netty.NotFoundHandler handleRequest
[datastore] INFO: Unknown request URI: /bad-request
我是否在我的代码或模拟器的设置中遗漏了一些明显的东西?