为什么获取Grpc.Core.RpcException StatusCode=Unavailable,Detail=";“连接失败”;,使用Google Cloud Firestore 1.0.0-beta05 C#SetAsync?

为什么获取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凭据 根据我们公司的设

我们在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凭据
  • 根据我们公司的设置,在web.config中配置代理
  • 已设置环境变量http\u proxy和https\u proxy
  • 有人能帮助我们理解为什么我们会得到以下结果吗

    Grpc.Core.RpcException:Status(StatusCode=Unavailable,Detail=“Connect Failed”)

    下面是相关的片段

    任何帮助都将不胜感激

    问候,

    埃蒙恩

    C#方法:

    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地址列表,以便绕过这些地址的代理