Para determinar la causa de los problemas de conexión con el servidor, se deberían aclarar las siguientes preguntas:
¿Está funcionando el servidor gRPC?
El servidor gRPC se ejecuta por defecto en un puerto local (por ejemplo, 9000). Se puede verificar si el servidor está accesible de una manera sencilla a través de PowerShell.
Comando en PowerShell: Test-NetConnection 127.0.0.1 -Port 9000
Salida 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: Si se muestra TcpTestSucceeded : True, el servidor gRPC es accesible y está funcionando. En caso de False, el servidor no está iniciado o el puerto no está disponible.
¿Qué significa un error de conexión gRPC al establecer la conexión?
En el entorno FEP, puede ocurrir que al establecer la conexión gRPC aparezca el siguiente mensaje de error (a primera vista críptico):
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)
Causa posible: El puerto configurado (por ejemplo, 9000) ya está ocupado por otro proceso. En este caso, el servidor gRPC no puede realizar correctamente el handshake de HTTP/2.
¿Cómo puedo verificar si un puerto ya está ocupado?
A través del comando netstat en PowerShell se pueden mostrar todos los procesos que utilizan un puerto específico.
Comando en PowerShell: netstat -ano | findstr :9000
Ejemplo de salida: Proto Local Address Foreign Address State PID TCP 0.0.0.0:9000 0.0.0.0:0 LISTENING 17616
Significado de las columnas: Local Address: Dirección IP local y puerto State: Estado (por ejemplo, LISTENING) PID: ID del proceso que ocupa el puerto
¿Cómo averiguar qué proceso está usando un puerto específico?
Con el PID determinado, a través de PowerShell se puede consultar el proceso correspondiente para obtener, entre otros, el nombre del proceso y otros detalles.
Comando en PowerShell: get-process -id 17616
Información: Alternativamente, el proceso también se puede identificar a través del Administrador de Tareas de Windows utilizando el PID.
Soluciones recomendadas
- Configurar un puerto alternativo y libre para el servidor gRPC
- O (si es posible) ajustar la configuración de puerto del software que bloquea
- Después del cambio, reiniciar el servidor y probar la conexión