У меня есть простой сервис grpc, написанный на C #. Я использую его в своем приложении, и в целом все работает нормально, но иногда сервисный вызов просто зависает и все. Клиент отправляет запрос, но обработчик сервера даже не вызывается. Звонок просто зависает ...
Вот код серверной стороны:
public class Program
{
static Server Server;
const int Port = 50055;
static void Main(string[] args)
{
StartEnviewServer();
while (Console.ReadKey().Key != ConsoleKey.Q) { }
StopEnviewServer();
}
static void StartEnviewServer()
{
SimpleGrpcService.SimpleGrpcServiceBase Service = new TestService();
Server = new Server()
{
Services = { SimpleGrpcService.BindService(Service) },
Ports = { new ServerPort("127.0.0.1", Port, ServerCredentials.Insecure),
new ServerPort("192.168.121.59", Port, ServerCredentials.Insecure),
new ServerPort("172.24.200.1", Port, ServerCredentials.Insecure)
}
};
Server.Start();
}
static void StopEnviewServer()
{
Server.ShutdownAsync();
}
}
class TestService : SimpleGrpcService.SimpleGrpcServiceBase
{
public override Task<SimpleString> TestCall(SimpleString request, ServerCallContext context)
{
Console.WriteLine(request.Value);
return Task.FromResult(new SimpleString());
}
}
Вот код на стороне клиента:
static void Main(string[] args)
{
var z = "localhost:50055";
TestServiceClient Service = new TestServiceClient(z);
Service.TestCall(new SimpleString());
Console.Read();
}
Все сделано в соответствии с рекомендациями пользователя, и все работает в один момент, но внезапно останавливается через некоторое время.
Недавно я нашел обходное решение. Когда я обновляю библиотеки grpc - Grpc.Core, Google.Protobuff и System.Interactive.Async до более старой версии и обратно, он снова начинает работать. Но это не решение для меня. Я хочу знать, как решить эту проблему раз и навсегда ...