Para determinar a causa dos problemas de conexão com o servidor, devem ser esclarecidas as seguintes questões:
O servidor gRPC está em execução?
O servidor gRPC roda por padrão em uma porta local (por exemplo, 9000). Se o servidor está acessível, pode ser facilmente verificado através do PowerShell.
Comando no PowerShell: Test-NetConnection 127.0.0.1 -Port 9000
Saída típica: ComputerName : 127.0.0.1 RemoteAddress : 127.0.0.1 RemotePort : 9000 InterfaceAlias : Loopback Pseudo-Interface 1 SourceAddress : 127.0.0.1 TcpTestSucceeded : True
Importante: Se TcpTestSucceeded : True for exibido, o servidor gRPC está acessível e em execução. Se for False, o servidor não foi iniciado ou a porta não está disponível.
O que significa um erro de conexão gRPC ao estabelecer uma conexão?
No ambiente FEP, pode ocorrer que ao estabelecer a conexão gRPC apareça a seguinte mensagem de erro (à primeira vista críptica):
gRPC Connection error: Unavailable - Error starting gRPC call. HttpRequestException: An HTTP/2 connection could not be established because the server did not complete the HTTP/2 handshake. (InvalidResponse) HttpIOException: The response ended prematurely while waiting for the next frame from the server. (ResponseEnded)
Possível causa: A porta configurada (por exemplo, 9000) já está em uso por outro processo. Nesse caso, o servidor gRPC não consegue realizar o handshake HTTP/2 corretamente.
Como posso verificar se uma porta já está em uso?
Através do comando netstat no PowerShell, todos os processos que utilizam uma determinada porta podem ser exibidos.
Comando no PowerShell: netstat -ano | findstr :9000
Saída de exemplo: Proto Local Address Foreign Address State PID TCP 0.0.0.0:9000 0.0.0.0:0 LISTENING 17616
Significado das colunas: Local Address: Endereço IP e porta local State: Status (por exemplo, LISTENING) PID: ID do processo que está usando a porta
Como descubro qual processo está utilizando uma determinada porta?
Com o PID determinado, o processo associado pode ser consultado através do PowerShell para obter, entre outras coisas, o nome do processo e mais detalhes.
Comando no PowerShell: get-process -id 17616
Info: Alternativamente, o processo também pode ser identificado através do Gerenciador de Tarefas do Windows usando o PID.
Soluções recomendadas
- Configurar uma porta alternativa e livre para o servidor gRPC
- Ou (se possível) ajustar a configuração de porta do software bloqueante
- Após a alteração, reiniciar o servidor e testar a conexão