C# GRCP截获客户端

C# GRCP截获客户端,c#,grpc,protobuf-net,C#,Grpc,Protobuf Net,我正在使用ProtobufNet(Grpc.Core上的v1.0.123,v2.30.0)并使用 var channel = new Channel(uri.Host, uri.Port, ChannelCredentials.Insecure, new [] { new ChannelOption("grpc.keepalive_time_ms", oneDayMs), new ChannelOption("gr

我正在使用ProtobufNet(Grpc.Core上的v1.0.123,v2.30.0)并使用

     var channel = new Channel(uri.Host, uri.Port, ChannelCredentials.Insecure, new []
     {
        new ChannelOption("grpc.keepalive_time_ms", oneDayMs),
        new ChannelOption("grpc.keepalive_timeout_ms", oneDayMs), 
        new ChannelOption("grpc.keepalive_permit_without_calls", 1), 
     });
     var proxy = channel.CreateGrpcService<T>();
var channel=new channel(uri.Host、uri.Port、ChannelCredentials.unsecure、new[]
{
新通道选项(“grpc.keepalive\u time\u ms”,oneDayMs),
新通道选项(“grpc.keepalive\u timeout\u ms”,oneDayMs),
新通道选项(“grpc.keepalive\u permit\u With\u calls”,1),
});
var proxy=channel.CreateGrpcService();
这非常有效,但是在一段时间的不活动之后,代理停止工作,我得到了
状态(StatusCode=“Unknown”,Detail=“Stream removed”,Debu…
,我认为这是一个持续存在的问题

我的第一个问题是:这些选项是否应该以某种方式设置在服务器端

这似乎不可能,因为它们是ChannelOptions,但我之所以这么问是因为我的第二个问题是:有没有办法拦截客户端调用?如果有,我可以在尝试和重新创建代理时检查异常(这对我们的用例有效)但是,就我所知,
拦截器
类严格来说是服务器端的东西


基本上,我只是想延长GRPC服务的生命周期,但我会采取任何方式来实现这一目标。

启用“服务器端保持活动”后,当通道在一段时间后空闲时,服务器端的“保持活动”将自动断开连接。客户端必须启用“保持活动”以定期发送长度为零的消息,以便服务器不会关闭连接n、 服务器将忽略长度为零的消息(防止连接关闭的情况除外)@jdweng我不确定我是否遵循:如何在服务器端打开/关闭keep alive?如何在客户端启用keep alive?显然,我所做的工作不起作用。在服务器上有一个计时器,每次收到消息时,计时器都会重置。当时间到期时,连接会关闭。在客户端上,请参阅:是否回答您的问题:?另请注意在Grpc.Core中,您实际上可以在创建服务器时设置“ChannelOptions”(请参阅“新建服务器(ChannelOptions)”)。此外,您还可以在服务器端和客户端截获呼叫。