为什么获取Grpc.Core.RpcException StatusCode=Unavailable,Detail=";“连接失败”;,使用Google Cloud Firestore 1.0.0-beta05 C#SetAsync?
我们在Google.Cloud.Firestore.1.0.0-beta05 NuGet包中使用C#,当我们尝试调用SetAsync时,总是会得到一个Grpc.Core.RpcException 详情:为什么获取Grpc.Core.RpcException StatusCode=Unavailable,Detail=";“连接失败”;,使用Google Cloud Firestore 1.0.0-beta05 C#SetAsync?,c#,.net,firebase,google-cloud-firestore,C#,.net,Firebase,Google Cloud Firestore,我们在Google.Cloud.Firestore.1.0.0-beta05 NuGet包中使用C#,当我们尝试调用SetAsync时,总是会得到一个Grpc.Core.RpcException 详情: Visual Studio 2017 .NET Framework V4.6.2 ASP.NET 版本:Google.Cloud.Firestore.1.0.0-beta05 发布日期:2018年6月7日星期四(6/7/2018) 环境变量已设置GOOGLE\u应用程序\u凭据 根据我们公司的设
private async Task FirebaseSetAsync(string projectId)
{
var database = FirestoreDb.Create(projectId: projectId);
var docRef = database.Collection("users").Document("company");
Dictionary<string, object> user = new Dictionary<string, object>
{
{ "First", "Alan" },
{ "Middle", "Mathison" },
{ "Last", "Turing" },
{ "Born", 1912 }
};
try
{
var result = await docRef.SetAsync(user);
}
catch (Exception exception)
{
Log.Error("Exception.", exception);
}
}
<system.net>
<defaultProxy>
<proxy proxyaddress="http://w.x.y.z:pppp/" />
</defaultProxy>
</system.net>
20:15:26.938 [ 7] [(null)] ERROR FirebaseFive.Controllers.HomeController - Exception.
Grpc.Core.RpcException: Status(StatusCode=Unavailable, Detail="Connect Failed")
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd(Task task)
at Google.Api.Gax.Grpc.ApiCallRetryExtensions.<>c__DisplayClass0_0`2.<<WithRetry>b__0>d.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at Google.Cloud.Firestore.WriteBatch.<CommitAsync>d__15.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at Google.Cloud.Firestore.DocumentReference.<SetAsync>d__24.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()
at FirebaseFive.Controllers.HomeController.<FirebaseSetAsync>d__1.MoveNext() in
专用异步任务FirebaseSetAsync(字符串projectId)
{
var database=FirestoreDb.Create(projectId:projectId);
var docRef=数据库、集合(“用户”)、文档(“公司”);
字典用户=新字典
{
{“第一”,“艾伦”},
{“中间”,“马蒂森”},
{“最后”,“图灵”},
{“出生”,1912}
};
尝试
{
var result=await docRef.SetAsync(用户);
}
捕获(异常)
{
日志错误(“异常”,异常);
}
}
web.config代码段:
private async Task FirebaseSetAsync(string projectId)
{
var database = FirestoreDb.Create(projectId: projectId);
var docRef = database.Collection("users").Document("company");
Dictionary<string, object> user = new Dictionary<string, object>
{
{ "First", "Alan" },
{ "Middle", "Mathison" },
{ "Last", "Turing" },
{ "Born", 1912 }
};
try
{
var result = await docRef.SetAsync(user);
}
catch (Exception exception)
{
Log.Error("Exception.", exception);
}
}
<system.net>
<defaultProxy>
<proxy proxyaddress="http://w.x.y.z:pppp/" />
</defaultProxy>
</system.net>
20:15:26.938 [ 7] [(null)] ERROR FirebaseFive.Controllers.HomeController - Exception.
Grpc.Core.RpcException: Status(StatusCode=Unavailable, Detail="Connect Failed")
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd(Task task)
at Google.Api.Gax.Grpc.ApiCallRetryExtensions.<>c__DisplayClass0_0`2.<<WithRetry>b__0>d.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at Google.Cloud.Firestore.WriteBatch.<CommitAsync>d__15.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at Google.Cloud.Firestore.DocumentReference.<SetAsync>d__24.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()
at FirebaseFive.Controllers.HomeController.<FirebaseSetAsync>d__1.MoveNext() in
日志文件片段:
private async Task FirebaseSetAsync(string projectId)
{
var database = FirestoreDb.Create(projectId: projectId);
var docRef = database.Collection("users").Document("company");
Dictionary<string, object> user = new Dictionary<string, object>
{
{ "First", "Alan" },
{ "Middle", "Mathison" },
{ "Last", "Turing" },
{ "Born", 1912 }
};
try
{
var result = await docRef.SetAsync(user);
}
catch (Exception exception)
{
Log.Error("Exception.", exception);
}
}
<system.net>
<defaultProxy>
<proxy proxyaddress="http://w.x.y.z:pppp/" />
</defaultProxy>
</system.net>
20:15:26.938 [ 7] [(null)] ERROR FirebaseFive.Controllers.HomeController - Exception.
Grpc.Core.RpcException: Status(StatusCode=Unavailable, Detail="Connect Failed")
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd(Task task)
at Google.Api.Gax.Grpc.ApiCallRetryExtensions.<>c__DisplayClass0_0`2.<<WithRetry>b__0>d.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at Google.Cloud.Firestore.WriteBatch.<CommitAsync>d__15.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at Google.Cloud.Firestore.DocumentReference.<SetAsync>d__24.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()
at FirebaseFive.Controllers.HomeController.<FirebaseSetAsync>d__1.MoveNext() in
20:15:26.938[7][(null)]错误FirebaseFive.Controller.HomeController-异常。
Grpc.Core.RpcException:状态(StatusCode=Unavailable,Detail=“连接失败”)
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务)
在System.Runtime.CompilerServices.TaskWaiter.HandleNonSuccessAndDebuggerNotification(任务任务)中
at System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd(任务任务)
在Google.Api.Gax.Grpc.ApiCallRetryExtensions.c_uudisplayClass0_0`2.d.MoveNext()上
---来自引发异常的上一个位置的堆栈结束跟踪---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务)
在System.Runtime.CompilerServices.TaskWaiter.HandleNonSuccessAndDebuggerNotification(任务任务)中
在Google.Cloud.Firestore.WriteBatch.d_u15.MoveNext()上
---来自引发异常的上一个位置的堆栈结束跟踪---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务)
在System.Runtime.CompilerServices.TaskWaiter.HandleNonSuccessAndDebuggerNotification(任务任务)中
在Google.Cloud.Firestore.DocumentReference.d_u24.MoveNext()上
---来自引发异常的上一个位置的堆栈结束跟踪---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务)
在System.Runtime.CompilerServices.TaskWaiter.HandleNonSuccessAndDebuggerNotification(任务任务)中
在System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()中
在FirebaseFive.Controllers.HomeController.d_u1.MoveNext()中
D:\Projects\Git\Firebase\FirebaseFive\FirebaseFive\Controllers\HomeController.cs:line 33在谷歌一些人的感激帮助下,答案如下: Firestore库/SDK使用HTTP/2.0协议进行通信,而我们公司的代理(squid缓存)不支持HTTP/2.0 现在我们必须看看是否可以获得Firestore和相关服务/域的IP地址列表,以便绕过这些地址的代理