如果服务器关闭,如何在C#中创建gRPC客户端超时?

时间:2016-06-07 03:24:22

标签: c# grpc

我正在使用来自MS Windows 10上的C#平台的gRPC写回TensorFlow服务系统的连接。我已经看到许多对gRPC的C ++ API的超时和死线的引用,但是可以'似乎要弄清楚如何在C#下超时。

我只是打开一个到服务器的通道,设置客户端和调用服务器。我希望分类在5秒左右后超时。任何帮助或指示将不胜感激。

  

channel = new Channel(modelServer,ChannelCredentials.Insecure);

     

var client = MyService.NewClient(channel);

     

MyResponse classvalue = client.Classify(featureSet);

2 个答案:

答案 0 :(得分:6)

要设置通话的截止日期,您只需使用以下“截止日期:”

即可
client.Classify(featureSet, deadline: DateTime.UtcNow.AddSeconds(5));

client.Classify(featureSet, new CallOptions(deadline: DateTime.UtcNow.AddSeconds(5)));

代码完成后,两种方式都很容易被发现。

答案 1 :(得分:2)

在连接通道的呼叫上需要使用

GRPC超时来检测服务器停机情况。我是这样做的:

    private async void SampleCode()
     {
          var client = await GetClient();
          var data = await client.GetAllTemplatesAsync(request, new 
                CallOptions().WithDeadline(DateTime.UtcNow.AddSeconds(7)));

     }

    private async Task<MyGrpcClient> GetClient()
    {
        var channel = new Channel("somehost",23456, ChannelCredentials.Insecure);
        await channel.ConnectAsync(deadline: DateTime.UtcNow.AddSeconds(2));
        return new MyGrpcClient(channel);
    }

因此,如果服务器关闭,则对GetClient()的调用将超时。如果服务器已启动但响应时间过长,则客户端服务调用上的超时将生效。