Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
En este tutorial se muestra cómo crear un cliente gRPC de .NET y un servidor gRPC de ASP.NET Core. Al final tendrá un cliente gRPC que se comunica con el servicio Greeter de gRPC.
En este tutorial, hizo lo siguiente:
- Crear un servicio gRPC.
- Crear un cliente gRPC.
- Prueba del cliente gRPC con el servicio gRPC Greeter.
Prerequisites
Visual Studio 2022 con la carga de trabajo ASP.NET y desarrollo web.
Crear un servicio gRPC
- Inicie Visual Studio 2022 y seleccione Nuevo proyecto.
- En el cuadro de diálogo Crear un nuevo proyecto, busque
gRPC. Seleccione Servicio gRPC de ASP.NET Core y luego elija Siguiente. - En el cuadro de diálogo Configurar su nuevo proyecto, escriba
GrpcGreeteren Nombre del proyecto. Es importante asignar un nombre al proyecto GrpcGreeter para que los espacios de nombres coincidan al copiar y pegar código. - Seleccione Siguiente.
- En el cuadro de diálogo Información adicional, seleccione .NET 9.0 (Soporte técnico de términos estándar) y, después, Crear.
Ejecutar el servicio
Presione Ctrl+F5 para ejecutarla sin el depurador.
Visual Studio muestra el siguiente cuadro de diálogo cuando un proyecto aún no está configurado para usar SSL:
Seleccione Sí si confía en el certificado SSL de IIS Express.
Se muestra el cuadro de diálogo siguiente:
Si acepta confiar en el certificado de desarrollo, seleccione Sí.
Para obtener información sobre cómo confiar en el explorador Firefox, consulte Error de certificado SEC_ERROR_INADEQUATE_KEY_USAGE de Firefox.
Visual Studio:
- Inicia el servidor Kestrel.
- Inicia un explorador.
- Navega a
http://localhost:port, comohttp://localhost:7042.- port: número de puerto asignado aleatoriamente para la aplicación.
-
localhost: nombre de host estándar para el equipo local. Localhost solo sirve las solicitudes web del equipo local.
Los registros muestran el servicio que escucha en https://localhost:<port>, donde <port> es el número de puerto localhost asignado aleatoriamente cuando se crea el proyecto y se establece en Properties/launchSettings.json.
info: Microsoft.Hosting.Lifetime[0]
Now listening on: https://localhost:<port>
info: Microsoft.Hosting.Lifetime[0]
Application started. Press Ctrl+C to shut down.
info: Microsoft.Hosting.Lifetime[0]
Hosting environment: Development
Note
La plantilla gRPC está configurada para usar Seguridad de la capa de transporte (TLS). Los clientes de gRPC necesitan usar HTTPS para llamar al servidor. El número de puerto localhost del servicio gRPC se asigna aleatoriamente cuando se crea el proyecto y se establece en propiedades \launchSettings.jsen el archivo del proyecto de servicio gRPC.
Examinar los archivos de proyecto
Archivos de proyecto grpcGreeter:
-
Protos/greet.proto: define el gRPCGreetery se usa para generar los recursos de servidor gRPC. Para obtener más información, vea Introducción a gRPC. - Carpeta
Services: contiene la implementación del servicioGreeter. -
appSettings.json: contiene datos de configuración, como el protocolo que usa Kestrel. Para más información, consulte Configuración en ASP.NET Core. -
Program.cs, que contiene:- el punto de entrada para el servicio gRPC. Para obtener más información, consulte Hospedaje genérico de .NET en ASP.NET Core.
- Código que configura el comportamiento de la aplicación. Para obtener más información, consulte Inicio de la aplicación.
Creación del cliente gRPC en una aplicación de consola de .NET
- Abra una segunda instancia de Visual Studio y seleccione Nuevo proyecto.
- En el cuadro de diálogo Crear un proyecto, seleccione Aplicación de consola y elija Siguiente.
- En el cuadro de texto Nombre del proyecto , escriba GrpcGreeterClient y seleccione Siguiente.
- En el cuadro de diálogo Información adicional, seleccione .NET 9.0 (Soporte técnico de términos estándar) y, después, Crear.
Adición de los paquetes NuGet necesarios
El proyecto de cliente gRPC requiere los siguientes paquetes NuGet:
- Grpc.Net.Client, que contiene el cliente de .NET.
- Google.Protobuf, que contiene las API de mensajes protobuf para C#.
-
Grpc.Tools, que contienen compatibilidad con herramientas de C# para archivos protobuf. El paquete de herramientas no es necesario en el runtime, de modo que la dependencia se marca con
PrivateAssets="All".
Instale los paquetes con la Consola del Administrador de paquetes (PMC) o mediante Administrar paquetes NuGet.
Opción de PMC para instalar paquetes
En Visual Studio, seleccione Herramientas>Administrador de paquetes NuGet>Consola del administrador de paquetes
En la ventana Consola del Administrador de paquetes, ejecute
cd GrpcGreeterClientpara cambiar los directorios a la carpeta que contiene los archivosGrpcGreeterClient.csproj.Ejecute los comandos siguientes:
Install-Package Grpc.Net.Client Install-Package Google.Protobuf Install-Package Grpc.Tools
Administración de la opción Paquetes NuGet para instalar paquetes
- Haga clic con el botón derecho en el proyecto en el Explorador> de solucionesAdministrar paquetes NuGet.
- Seleccione la pestaña Examinar.
- Escriba Grpc.Net.Client en el cuadro de búsqueda.
- Seleccione el paquete Grpc.Net.Client en la pestaña Examinar y seleccione Instalar.
- Repita para
Google.ProtobufyGrpc.Tools.
Agregar greet.proto
Cree una carpeta Protos en el proyecto de cliente gRPC.
Copie el archivo Protos\greet.proto del servicio gRPC Greeter en la carpeta Protos del proyecto de cliente gRPC.
Actualice el espacio de nombres del archivo
greet.protoal espacio de nombres del proyecto:option csharp_namespace = "GrpcGreeterClient";Edición del archivo del proyecto
GrpcGreeterClient.csproj:
Haga clic con el botón derecho en el proyecto y seleccione Editar archivo del proyecto.
Agregue un grupo de elementos con un
<Protobuf>elemento que haga referencia al archivo greet.proto :<ItemGroup> <Protobuf Include="Protos\greet.proto" GrpcServices="Client" /> </ItemGroup>
Creación del cliente de Greeter
- Compile el proyecto de cliente para crear los tipos en el espacio de nombres
GrpcGreeterClient.
Note
El proceso de compilación genera automáticamente los tipos GrpcGreeterClient. El paquete de herramientas Grpc.Tools genera los siguientes archivos en función del archivo greet.proto :
-
GrpcGreeterClient\obj\Debug\[TARGET_FRAMEWORK]\Protos\Greet.cs: el código de búfer de protocolo que rellena, serializa y recupera los tipos de mensaje de solicitud y respuesta. -
GrpcGreeterClient\obj\Debug\[TARGET_FRAMEWORK]\Protos\GreetGrpc.cs: contiene las clases de cliente generadas.
Para obtener más información sobre los recursos de C# generados automáticamente por Grpc.Tools, consulte gRPC services with C#: Generated C# assets (Servicios gRPC con recursos de C#: recursos de C# generados).
Actualice el archivo
Program.csdel cliente gRPC con el código siguiente.using Grpc.Net.Client; using GrpcGreeterClient; // The port number must match the port of the gRPC server. using var channel = GrpcChannel.ForAddress("https://localhost:7042"); var client = new Greeter.GreeterClient(channel); var reply = await client.SayHelloAsync( new HelloRequest { Name = "GreeterClient" }); Console.WriteLine("Greeting: " + reply.Message); Console.WriteLine("Press any key to exit..."); Console.ReadKey();En el código resaltado anterior, reemplace el número de puerto localhost
7042por el número de puertoHTTPSespecificado enProperties/launchSettings.jsondentro del proyecto de servicioGrpcGreeter.
Program.cs contiene el punto de entrada y la lógica para el cliente gRPC.
El cliente de Greeter se crea mediante lo siguiente:
- Creación de una instancia de
GrpcChannelque contiene la información para crear la conexión al servicio gRPC. - Uso de
GrpcChannelpara construir el cliente de Greeter:
// The port number must match the port of the gRPC server.
using var channel = GrpcChannel.ForAddress("https://localhost:7042");
var client = new Greeter.GreeterClient(channel);
var reply = await client.SayHelloAsync(
new HelloRequest { Name = "GreeterClient" });
Console.WriteLine("Greeting: " + reply.Message);
Console.WriteLine("Press any key to exit...");
Console.ReadKey();
El cliente de Greeter realiza una llamada al método SayHello asincrónico. Se muestra el resultado de la llamada a SayHello:
// The port number must match the port of the gRPC server.
using var channel = GrpcChannel.ForAddress("https://localhost:7042");
var client = new Greeter.GreeterClient(channel);
var reply = await client.SayHelloAsync(
new HelloRequest { Name = "GreeterClient" });
Console.WriteLine("Greeting: " + reply.Message);
Console.WriteLine("Press any key to exit...");
Console.ReadKey();
Prueba del cliente gRPC con el servicio gRPC Greeter
Actualice el archivo appsettings.Development.json mediante la adición de las siguientes líneas destacadas:
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning",
"Microsoft.AspNetCore.Hosting": "Information",
"Microsoft.AspNetCore.Routing.EndpointMiddleware": "Information"
}
}
}
- En el proyecto de servicio
GrpcGreeter, presioneCtrl+F5para iniciar el servidor sin el depurador. - En la consola del proyecto
GrpcGreeterClient, presioneCtrl+F5para iniciar el cliente sin el depurador.
El cliente envía un saludo al servicio con un mensaje que contiene su nombre , GreeterClient. El servicio envía el mensaje "Hello GreeterClient" como respuesta. La respuesta "Hello GreeterClient" se muestra en el símbolo del sistema:
Greeting: Hello GreeterClient
Press any key to exit...
El servicio gRPC registra los detalles de la llamada correcta en los registros escritos en el símbolo del sistema:
info: Microsoft.Hosting.Lifetime[0]
Now listening on: https://localhost:<port>
info: Microsoft.Hosting.Lifetime[0]
Application started. Press Ctrl+C to shut down.
info: Microsoft.Hosting.Lifetime[0]
Hosting environment: Development
info: Microsoft.Hosting.Lifetime[0]
Content root path: C:\GH\aspnet\docs\4\Docs\aspnetcore\tutorials\grpc\grpc-start\sample\GrpcGreeter
info: Microsoft.AspNetCore.Hosting.Diagnostics[1]
Request starting HTTP/2 POST https://localhost:<port>/greet.Greeter/SayHello application/grpc
info: Microsoft.AspNetCore.Routing.EndpointMiddleware[0]
Executing endpoint 'gRPC - /greet.Greeter/SayHello'
info: Microsoft.AspNetCore.Routing.EndpointMiddleware[1]
Executed endpoint 'gRPC - /greet.Greeter/SayHello'
info: Microsoft.AspNetCore.Hosting.Diagnostics[2]
Request finished HTTP/2 POST https://localhost:7042/greet.Greeter/SayHello - 200 - application/grpc 40.4615ms
Note
El código de este artículo requiere el certificado de desarrollo de ASP.NET Core HTTPS para proteger el servicio gRPC. Si el cliente gRPC de .NET genera un error con el mensaje The remote certificate is invalid according to the validation procedure. o The SSL connection could not be established., el certificado de desarrollo no es de confianza. Para corregir este problema, consulte Llamada a un servicio gRPC con un certificado no válido o que no es de confianza.
Pasos siguientes
En este tutorial se muestra cómo crear un cliente gRPC de .NET y un servidor gRPC de ASP.NET Core. Al final tendrá un cliente gRPC que se comunica con el servicio Greeter de gRPC.
En este tutorial, hizo lo siguiente:
- Crear un servicio gRPC.
- Crear un cliente gRPC.
- Prueba del cliente gRPC con el servicio gRPC Greeter.
Prerequisites
Visual Studio 2022 con la carga de trabajo ASP.NET y desarrollo web.
Crear un servicio gRPC
- Inicie Visual Studio 2022 y seleccione Nuevo proyecto.
- En el cuadro de diálogo Crear un nuevo proyecto, busque
gRPC. Seleccione Servicio gRPC de ASP.NET Core y luego elija Siguiente. - En el cuadro de diálogo Configurar su nuevo proyecto, escriba
GrpcGreeteren Nombre del proyecto. Es importante asignar un nombre al proyecto GrpcGreeter para que los espacios de nombres coincidan al copiar y pegar código. - Seleccione Siguiente.
- En el cuadro de diálogo Información adicional , seleccione .NET 8.0 (Soporte técnico a largo plazo) y, a continuación, seleccione Crear.
Ejecutar el servicio
Presione Ctrl+F5 para ejecutarla sin el depurador.
Visual Studio muestra el siguiente cuadro de diálogo cuando un proyecto aún no está configurado para usar SSL:
Seleccione Sí si confía en el certificado SSL de IIS Express.
Se muestra el cuadro de diálogo siguiente:
Si acepta confiar en el certificado de desarrollo, seleccione Sí.
Para obtener información sobre cómo confiar en el explorador Firefox, consulte Error de certificado SEC_ERROR_INADEQUATE_KEY_USAGE de Firefox.
Visual Studio:
- Inicia el servidor Kestrel.
- Inicia un explorador.
- Navega a
http://localhost:port, comohttp://localhost:7042.- port: número de puerto asignado aleatoriamente para la aplicación.
-
localhost: nombre de host estándar para el equipo local. Localhost solo sirve las solicitudes web del equipo local.
Los registros muestran el servicio que escucha en https://localhost:<port>, donde <port> es el número de puerto localhost asignado aleatoriamente cuando se crea el proyecto y se establece en Properties/launchSettings.json.
info: Microsoft.Hosting.Lifetime[0]
Now listening on: https://localhost:<port>
info: Microsoft.Hosting.Lifetime[0]
Application started. Press Ctrl+C to shut down.
info: Microsoft.Hosting.Lifetime[0]
Hosting environment: Development
Note
La plantilla gRPC está configurada para usar Seguridad de la capa de transporte (TLS). Los clientes de gRPC necesitan usar HTTPS para llamar al servidor. El número de puerto localhost del servicio gRPC se asigna aleatoriamente cuando se crea el proyecto y se establece en propiedades \launchSettings.jsen el archivo del proyecto de servicio gRPC.
Examinar los archivos de proyecto
Archivos de proyecto grpcGreeter:
-
Protos/greet.proto: define el gRPCGreetery se usa para generar los recursos de servidor gRPC. Para obtener más información, vea Introducción a gRPC. - Carpeta
Services: contiene la implementación del servicioGreeter. -
appSettings.json: contiene datos de configuración, como el protocolo que usa Kestrel. Para más información, consulte Configuración en ASP.NET Core. -
Program.cs, que contiene:- el punto de entrada para el servicio gRPC. Para obtener más información, consulte Hospedaje genérico de .NET en ASP.NET Core.
- Código que configura el comportamiento de la aplicación. Para obtener más información, consulte Inicio de la aplicación.
Creación del cliente gRPC en una aplicación de consola de .NET
- Abra una segunda instancia de Visual Studio y seleccione Nuevo proyecto.
- En el cuadro de diálogo Crear un proyecto, seleccione Aplicación de consola y elija Siguiente.
- En el cuadro de texto Nombre del proyecto , escriba GrpcGreeterClient y seleccione Siguiente.
- En el cuadro de diálogo Información adicional , seleccione .NET 8.0 (Soporte técnico a largo plazo) y, a continuación, seleccione Crear.
Adición de los paquetes NuGet necesarios
El proyecto de cliente gRPC requiere los siguientes paquetes NuGet:
- Grpc.Net.Client, que contiene el cliente de .NET.
- Google.Protobuf, que contiene las API de mensajes protobuf para C#.
-
Grpc.Tools, que contienen compatibilidad con herramientas de C# para archivos protobuf. El paquete de herramientas no es necesario en el runtime, de modo que la dependencia se marca con
PrivateAssets="All".
Instale los paquetes con la Consola del Administrador de paquetes (PMC) o mediante Administrar paquetes NuGet.
Opción de PMC para instalar paquetes
En Visual Studio, seleccione Herramientas>Administrador de paquetes NuGet>Consola del administrador de paquetes
En la ventana Consola del Administrador de paquetes, ejecute
cd GrpcGreeterClientpara cambiar los directorios a la carpeta que contiene los archivosGrpcGreeterClient.csproj.Ejecute los comandos siguientes:
Install-Package Grpc.Net.Client Install-Package Google.Protobuf Install-Package Grpc.Tools
Administración de la opción Paquetes NuGet para instalar paquetes
- Haga clic con el botón derecho en el proyecto en el Explorador> de solucionesAdministrar paquetes NuGet.
- Seleccione la pestaña Examinar.
- Escriba Grpc.Net.Client en el cuadro de búsqueda.
- Seleccione el paquete Grpc.Net.Client en la pestaña Examinar y seleccione Instalar.
- Repita para
Google.ProtobufyGrpc.Tools.
Agregar greet.proto
Cree una carpeta Protos en el proyecto de cliente gRPC.
Copie el archivo Protos\greet.proto del servicio gRPC Greeter en la carpeta Protos del proyecto de cliente gRPC.
Actualice el espacio de nombres del archivo
greet.protoal espacio de nombres del proyecto:option csharp_namespace = "GrpcGreeterClient";Edición del archivo del proyecto
GrpcGreeterClient.csproj:
Haga clic con el botón derecho en el proyecto y seleccione Editar archivo del proyecto.
Agregue un grupo de elementos con un
<Protobuf>elemento que haga referencia al archivo greet.proto :<ItemGroup> <Protobuf Include="Protos\greet.proto" GrpcServices="Client" /> </ItemGroup>
Creación del cliente de Greeter
- Compile el proyecto de cliente para crear los tipos en el espacio de nombres
GrpcGreeterClient.
Note
El proceso de compilación genera automáticamente los tipos GrpcGreeterClient. El paquete de herramientas Grpc.Tools genera los siguientes archivos en función del archivo greet.proto :
-
GrpcGreeterClient\obj\Debug\[TARGET_FRAMEWORK]\Protos\Greet.cs: el código de búfer de protocolo que rellena, serializa y recupera los tipos de mensaje de solicitud y respuesta. -
GrpcGreeterClient\obj\Debug\[TARGET_FRAMEWORK]\Protos\GreetGrpc.cs: contiene las clases de cliente generadas.
Para obtener más información sobre los recursos de C# generados automáticamente por Grpc.Tools, consulte gRPC services with C#: Generated C# assets (Servicios gRPC con recursos de C#: recursos de C# generados).
Actualice el archivo
Program.csdel cliente gRPC con el código siguiente.using System.Threading.Tasks; using Grpc.Net.Client; using GrpcGreeterClient; // The port number must match the port of the gRPC server. using var channel = GrpcChannel.ForAddress("https://localhost:7042"); var client = new Greeter.GreeterClient(channel); var reply = await client.SayHelloAsync( new HelloRequest { Name = "GreeterClient" }); Console.WriteLine("Greeting: " + reply.Message); Console.WriteLine("Press any key to exit..."); Console.ReadKey();En el código resaltado anterior, reemplace el número de puerto localhost
7042por el número de puertoHTTPSespecificado enProperties/launchSettings.jsondentro del proyecto de servicioGrpcGreeter.
Program.cs contiene el punto de entrada y la lógica para el cliente gRPC.
El cliente de Greeter se crea mediante lo siguiente:
- Creación de una instancia de
GrpcChannelque contiene la información para crear la conexión al servicio gRPC. - Uso de
GrpcChannelpara construir el cliente de Greeter:
// The port number must match the port of the gRPC server.
using var channel = GrpcChannel.ForAddress("https://localhost:7042");
var client = new Greeter.GreeterClient(channel);
var reply = await client.SayHelloAsync(
new HelloRequest { Name = "GreeterClient" });
Console.WriteLine("Greeting: " + reply.Message);
Console.WriteLine("Press any key to exit...");
Console.ReadKey();
El cliente de Greeter realiza una llamada al método SayHello asincrónico. Se muestra el resultado de la llamada a SayHello:
// The port number must match the port of the gRPC server.
using var channel = GrpcChannel.ForAddress("https://localhost:7042");
var client = new Greeter.GreeterClient(channel);
var reply = await client.SayHelloAsync(
new HelloRequest { Name = "GreeterClient" });
Console.WriteLine("Greeting: " + reply.Message);
Console.WriteLine("Press any key to exit...");
Console.ReadKey();
Prueba del cliente gRPC con el servicio gRPC Greeter
Actualice el archivo appsettings.Development.json mediante la adición de las siguientes líneas destacadas:
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
,"Microsoft.AspNetCore.Hosting": "Information",
"Microsoft.AspNetCore.Routing.EndpointMiddleware": "Information"
}
}
}
- En el servicio Greeter, presione
Ctrl+F5para iniciar el servidor sin el depurador. - En el proyecto
GrpcGreeterClient, presioneCtrl+F5para iniciar el cliente sin el depurador.
El cliente envía un saludo al servicio con un mensaje que contiene su nombre , GreeterClient. El servicio envía el mensaje "Hello GreeterClient" como respuesta. La respuesta "Hello GreeterClient" se muestra en el símbolo del sistema:
Greeting: Hello GreeterClient
Press any key to exit...
El servicio gRPC registra los detalles de la llamada correcta en los registros escritos en el símbolo del sistema:
info: Microsoft.Hosting.Lifetime[0]
Now listening on: https://localhost:<port>
info: Microsoft.Hosting.Lifetime[0]
Application started. Press Ctrl+C to shut down.
info: Microsoft.Hosting.Lifetime[0]
Hosting environment: Development
info: Microsoft.Hosting.Lifetime[0]
Content root path: C:\GH\aspnet\docs\4\Docs\aspnetcore\tutorials\grpc\grpc-start\sample\GrpcGreeter
info: Microsoft.AspNetCore.Hosting.Diagnostics[1]
Request starting HTTP/2 POST https://localhost:<port>/Greet.Greeter/SayHello application/grpc
info: Microsoft.AspNetCore.Routing.EndpointMiddleware[0]
Executing endpoint 'gRPC - /Greet.Greeter/SayHello'
info: Microsoft.AspNetCore.Routing.EndpointMiddleware[1]
Executed endpoint 'gRPC - /Greet.Greeter/SayHello'
info: Microsoft.AspNetCore.Hosting.Diagnostics[2]
Request finished in 78.32260000000001ms 200 application/grpc
Note
El código de este artículo requiere el certificado de desarrollo de ASP.NET Core HTTPS para proteger el servicio gRPC. Si el cliente gRPC de .NET genera un error con el mensaje The remote certificate is invalid according to the validation procedure. o The SSL connection could not be established., el certificado de desarrollo no es de confianza. Para corregir este problema, consulte Llamada a un servicio gRPC con un certificado no válido o que no es de confianza.
Pasos siguientes
En este tutorial se muestra cómo crear un cliente gRPC de .NET y un servidor gRPC de ASP.NET Core. Al final tendrá un cliente gRPC que se comunica con el servicio Greeter de gRPC.
En este tutorial, hizo lo siguiente:
- Crear un servicio gRPC.
- Crear un cliente gRPC.
- Prueba del cliente gRPC con el servicio gRPC Greeter.
Prerequisites
Visual Studio 2022 con la carga de trabajo ASP.NET y desarrollo web.
Crear un servicio gRPC
- Inicie Visual Studio 2022 y seleccione Crear un proyecto.
- En el cuadro de diálogo Crear un nuevo proyecto, busque
gRPC. Seleccione Servicio gRPC de ASP.NET Core y luego elija Siguiente. - En el cuadro de diálogo Configurar su nuevo proyecto, escriba
GrpcGreeteren Nombre del proyecto. Es importante asignar un nombre al proyecto GrpcGreeter para que los espacios de nombres coincidan al copiar y pegar código. - Seleccione Siguiente.
- En el cuadro de diálogo Información adicional , seleccione .NET 6.0 (soporte técnico a largo plazo) y, a continuación, seleccione Crear.
Ejecutar el servicio
Presione Ctrl+F5 para ejecutarla sin el depurador.
Visual Studio muestra el siguiente cuadro de diálogo cuando un proyecto aún no está configurado para usar SSL:
Seleccione Sí si confía en el certificado SSL de IIS Express.
Se muestra el cuadro de diálogo siguiente:
Si acepta confiar en el certificado de desarrollo, seleccione Sí.
Para obtener información sobre cómo confiar en el explorador Firefox, consulte Error de certificado SEC_ERROR_INADEQUATE_KEY_USAGE de Firefox.
Visual Studio:
- Inicia el servidor Kestrel.
- Inicia un explorador.
- Navega a
http://localhost:port, comohttp://localhost:7042.- port: número de puerto asignado aleatoriamente para la aplicación.
-
localhost: nombre de host estándar para el equipo local. Localhost solo sirve las solicitudes web del equipo local.
Los registros muestran el servicio que escucha en https://localhost:<port>, donde <port> es el número de puerto localhost asignado aleatoriamente cuando se crea el proyecto y se establece en Properties/launchSettings.json.
info: Microsoft.Hosting.Lifetime[0]
Now listening on: https://localhost:<port>
info: Microsoft.Hosting.Lifetime[0]
Application started. Press Ctrl+C to shut down.
info: Microsoft.Hosting.Lifetime[0]
Hosting environment: Development
Note
La plantilla gRPC está configurada para usar Seguridad de la capa de transporte (TLS). Los clientes de gRPC necesitan usar HTTPS para llamar al servidor. El número de puerto localhost del servicio gRPC se asigna aleatoriamente cuando se crea el proyecto y se establece en propiedades \launchSettings.jsen el archivo del proyecto de servicio gRPC.
macOS no admite gRPC de ASP.NET Core con TLS. Se requiere configuración adicional para ejecutar correctamente servicios gRPC en macOS. Para obtener más información, vea No se puede iniciar la aplicación gRPC de ASP.NET Core en macOS.
Examinar los archivos de proyecto
Archivos de proyecto grpcGreeter:
-
Protos/greet.proto: define el gRPCGreetery se usa para generar los recursos de servidor gRPC. Para obtener más información, vea Introducción a gRPC. - Carpeta
Services: contiene la implementación del servicioGreeter. -
appSettings.json: contiene datos de configuración, como el protocolo que usa Kestrel. Para más información, consulte Configuración en ASP.NET Core. -
Program.cs, que contiene:- el punto de entrada para el servicio gRPC. Para obtener más información, consulte Hospedaje genérico de .NET en ASP.NET Core.
- Código que configura el comportamiento de la aplicación. Para obtener más información, consulte Inicio de la aplicación.
Creación del cliente gRPC en una aplicación de consola de .NET
- Abra una segunda instancia de Visual Studio y seleccione Crear un proyecto.
- En el cuadro de diálogo Crear un proyecto, seleccione Aplicación de consola y elija Siguiente.
- En el cuadro de texto Nombre del proyecto , escriba GrpcGreeterClient y seleccione Siguiente.
- En el cuadro de diálogo Información adicional , seleccione .NET 6.0 (soporte técnico a largo plazo) y, a continuación, seleccione Crear.
Adición de los paquetes NuGet necesarios
El proyecto de cliente gRPC requiere los siguientes paquetes NuGet:
- Grpc.Net.Client, que contiene el cliente de .NET.
- Google.Protobuf, que contiene las API de mensajes protobuf para C#.
-
Grpc.Tools, que contienen compatibilidad con herramientas de C# para archivos protobuf. El paquete de herramientas no es necesario en el runtime, de modo que la dependencia se marca con
PrivateAssets="All".
Instale los paquetes con la Consola del Administrador de paquetes (PMC) o mediante Administrar paquetes NuGet.
Opción de PMC para instalar paquetes
En Visual Studio, seleccione Herramientas>Administrador de paquetes NuGet>Consola del administrador de paquetes
En la ventana Consola del Administrador de paquetes, ejecute
cd GrpcGreeterClientpara cambiar los directorios a la carpeta que contiene los archivosGrpcGreeterClient.csproj.Ejecute los comandos siguientes:
Install-Package Grpc.Net.Client Install-Package Google.Protobuf Install-Package Grpc.Tools
Administración de la opción Paquetes NuGet para instalar paquetes
- Haga clic con el botón derecho en el proyecto en el Explorador> de solucionesAdministrar paquetes NuGet.
- Seleccione la pestaña Examinar.
- Escriba Grpc.Net.Client en el cuadro de búsqueda.
- Seleccione el paquete Grpc.Net.Client en la pestaña Examinar y seleccione Instalar.
- Repita para
Google.ProtobufyGrpc.Tools.
Agregar greet.proto
Cree una carpeta Protos en el proyecto de cliente gRPC.
Copie el archivo Protos\greet.proto del servicio gRPC Greeter en la carpeta Protos del proyecto de cliente gRPC.
Actualice el espacio de nombres del archivo
greet.protoal espacio de nombres del proyecto:option csharp_namespace = "GrpcGreeterClient";Edición del archivo del proyecto
GrpcGreeterClient.csproj:
Haga clic con el botón derecho en el proyecto y seleccione Editar archivo del proyecto.
Agregue un grupo de elementos con un
<Protobuf>elemento que haga referencia al archivo greet.proto :<ItemGroup> <Protobuf Include="Protos\greet.proto" GrpcServices="Client" /> </ItemGroup>
Creación del cliente de Greeter
- Compile el proyecto de cliente para crear los tipos en el espacio de nombres
GrpcGreeterClient.
Note
El proceso de compilación genera automáticamente los tipos GrpcGreeterClient. El paquete de herramientas Grpc.Tools genera los siguientes archivos en función del archivo greet.proto :
-
GrpcGreeterClient\obj\Debug\[TARGET_FRAMEWORK]\Protos\Greet.cs: el código de búfer de protocolo que rellena, serializa y recupera los tipos de mensaje de solicitud y respuesta. -
GrpcGreeterClient\obj\Debug\[TARGET_FRAMEWORK]\Protos\GreetGrpc.cs: contiene las clases de cliente generadas.
Para obtener más información sobre los recursos de C# generados automáticamente por Grpc.Tools, consulte gRPC services with C#: Generated C# assets (Servicios gRPC con recursos de C#: recursos de C# generados).
Actualice el archivo
Program.csdel cliente gRPC con el código siguiente.using System.Threading.Tasks; using Grpc.Net.Client; using GrpcGreeterClient; // The port number must match the port of the gRPC server. using var channel = GrpcChannel.ForAddress("https://localhost:7042"); var client = new Greeter.GreeterClient(channel); var reply = await client.SayHelloAsync( new HelloRequest { Name = "GreeterClient" }); Console.WriteLine("Greeting: " + reply.Message); Console.WriteLine("Press any key to exit..."); Console.ReadKey();En el código resaltado anterior, reemplace el número de puerto localhost
7042por el número de puertoHTTPSespecificado enProperties/launchSettings.jsondentro del proyecto de servicioGrpcGreeter.
Program.cs contiene el punto de entrada y la lógica para el cliente gRPC.
El cliente de Greeter se crea mediante lo siguiente:
- Creación de una instancia de
GrpcChannelque contiene la información para crear la conexión al servicio gRPC. - Uso de
GrpcChannelpara construir el cliente de Greeter:
// The port number must match the port of the gRPC server.
using var channel = GrpcChannel.ForAddress("https://localhost:7042");
var client = new Greeter.GreeterClient(channel);
var reply = await client.SayHelloAsync(
new HelloRequest { Name = "GreeterClient" });
Console.WriteLine("Greeting: " + reply.Message);
Console.WriteLine("Press any key to exit...");
Console.ReadKey();
El cliente de Greeter realiza una llamada al método SayHello asincrónico. Se muestra el resultado de la llamada a SayHello:
// The port number must match the port of the gRPC server.
using var channel = GrpcChannel.ForAddress("https://localhost:7042");
var client = new Greeter.GreeterClient(channel);
var reply = await client.SayHelloAsync(
new HelloRequest { Name = "GreeterClient" });
Console.WriteLine("Greeting: " + reply.Message);
Console.WriteLine("Press any key to exit...");
Console.ReadKey();
Prueba del cliente gRPC con el servicio gRPC Greeter
Actualice el archivo appsettings.Development.json mediante la adición de las siguientes líneas destacadas:
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
,"Microsoft.AspNetCore.Hosting": "Information",
"Microsoft.AspNetCore.Routing.EndpointMiddleware": "Information"
}
}
}
- En el servicio Greeter, presione
Ctrl+F5para iniciar el servidor sin el depurador. - En el proyecto
GrpcGreeterClient, presioneCtrl+F5para iniciar el cliente sin el depurador.
El cliente envía un saludo al servicio con un mensaje que contiene su nombre , GreeterClient. El servicio envía el mensaje "Hello GreeterClient" como respuesta. La respuesta "Hello GreeterClient" se muestra en el símbolo del sistema:
Greeting: Hello GreeterClient
Press any key to exit...
El servicio gRPC registra los detalles de la llamada correcta en los registros escritos en el símbolo del sistema:
info: Microsoft.Hosting.Lifetime[0]
Now listening on: https://localhost:<port>
info: Microsoft.Hosting.Lifetime[0]
Application started. Press Ctrl+C to shut down.
info: Microsoft.Hosting.Lifetime[0]
Hosting environment: Development
info: Microsoft.Hosting.Lifetime[0]
Content root path: C:\GH\aspnet\docs\4\Docs\aspnetcore\tutorials\grpc\grpc-start\sample\GrpcGreeter
info: Microsoft.AspNetCore.Hosting.Diagnostics[1]
Request starting HTTP/2 POST https://localhost:<port>/Greet.Greeter/SayHello application/grpc
info: Microsoft.AspNetCore.Routing.EndpointMiddleware[0]
Executing endpoint 'gRPC - /Greet.Greeter/SayHello'
info: Microsoft.AspNetCore.Routing.EndpointMiddleware[1]
Executed endpoint 'gRPC - /Greet.Greeter/SayHello'
info: Microsoft.AspNetCore.Hosting.Diagnostics[2]
Request finished in 78.32260000000001ms 200 application/grpc
Note
El código de este artículo requiere el certificado de desarrollo de ASP.NET Core HTTPS para proteger el servicio gRPC. Si el cliente gRPC de .NET genera un error con el mensaje The remote certificate is invalid according to the validation procedure. o The SSL connection could not be established., el certificado de desarrollo no es de confianza. Para corregir este problema, consulte Llamada a un servicio gRPC con un certificado no válido o que no es de confianza.
Pasos siguientes
En este tutorial se muestra cómo crear un cliente gRPC de .NET y un servidor gRPC de ASP.NET Core. Al final tendrá un cliente gRPC que se comunica con el servicio Greeter de gRPC.
En este tutorial, hizo lo siguiente:
- Crear un servicio gRPC.
- Crear un cliente gRPC.
- Prueba del cliente gRPC con el servicio gRPC Greeter.
Prerequisites
- Visual Studio 2022 con la carga de trabajo ASP.NET y desarrollo web.
- SDK de .NET 6
Crear un servicio gRPC
- Inicie Visual Studio 2022 y seleccione Crear un proyecto.
- En el cuadro de diálogo Crear un nuevo proyecto, busque
gRPC. Seleccione Servicio gRPC de ASP.NET Core y luego elija Siguiente. - En el cuadro de diálogo Configurar su nuevo proyecto, escriba
GrpcGreeteren Nombre del proyecto. Es importante asignar un nombre al proyecto GrpcGreeter para que los espacios de nombres coincidan al copiar y pegar código. - Seleccione Siguiente.
- En el cuadro de diálogo Información adicional , seleccione .NET 6.0 (soporte técnico a largo plazo) y, a continuación, seleccione Crear.
Ejecutar el servicio
Presione Ctrl+F5 para ejecutarla sin el depurador.
Visual Studio muestra el siguiente cuadro de diálogo cuando un proyecto aún no está configurado para usar SSL:
Seleccione Sí si confía en el certificado SSL de IIS Express.
Se muestra el cuadro de diálogo siguiente:
Si acepta confiar en el certificado de desarrollo, seleccione Sí.
Para obtener información sobre cómo confiar en el explorador Firefox, consulte Error de certificado SEC_ERROR_INADEQUATE_KEY_USAGE de Firefox.
Visual Studio:
- Inicia el servidor Kestrel.
- Inicia un explorador.
- Navega a
http://localhost:port, comohttp://localhost:7042.- port: número de puerto asignado aleatoriamente para la aplicación.
-
localhost: nombre de host estándar para el equipo local. Localhost solo sirve las solicitudes web del equipo local.
Los registros muestran el servicio que escucha en https://localhost:<port>, donde <port> es el número de puerto localhost asignado aleatoriamente cuando se crea el proyecto y se establece en Properties/launchSettings.json.
info: Microsoft.Hosting.Lifetime[0]
Now listening on: https://localhost:<port>
info: Microsoft.Hosting.Lifetime[0]
Application started. Press Ctrl+C to shut down.
info: Microsoft.Hosting.Lifetime[0]
Hosting environment: Development
Note
La plantilla gRPC está configurada para usar Seguridad de la capa de transporte (TLS). Los clientes de gRPC necesitan usar HTTPS para llamar al servidor. El número de puerto localhost del servicio gRPC se asigna aleatoriamente cuando se crea el proyecto y se establece en propiedades \launchSettings.jsen el archivo del proyecto de servicio gRPC.
macOS no admite gRPC de ASP.NET Core con TLS. Se requiere configuración adicional para ejecutar correctamente servicios gRPC en macOS. Para obtener más información, vea No se puede iniciar la aplicación gRPC de ASP.NET Core en macOS.
Examinar los archivos de proyecto
Archivos de proyecto grpcGreeter:
-
Protos/greet.proto: define el gRPCGreetery se usa para generar los recursos de servidor gRPC. Para obtener más información, vea Introducción a gRPC. - Carpeta
Services: contiene la implementación del servicioGreeter. -
appSettings.json: contiene datos de configuración, como el protocolo que usa Kestrel. Para más información, consulte Configuración en ASP.NET Core. -
Program.cs, que contiene:- el punto de entrada para el servicio gRPC. Para obtener más información, consulte Hospedaje genérico de .NET en ASP.NET Core.
- Código que configura el comportamiento de la aplicación. Para obtener más información, consulte Inicio de la aplicación.
Creación del cliente gRPC en una aplicación de consola de .NET
- Abra una segunda instancia de Visual Studio y seleccione Crear un proyecto.
- En el cuadro de diálogo Crear un proyecto, seleccione Aplicación de consola y elija Siguiente.
- En el cuadro de texto Nombre del proyecto , escriba GrpcGreeterClient y seleccione Siguiente.
- En el cuadro de diálogo Información adicional , seleccione .NET 6.0 (soporte técnico a largo plazo) y, a continuación, seleccione Crear.
Adición de los paquetes NuGet necesarios
El proyecto de cliente gRPC requiere los siguientes paquetes NuGet:
- Grpc.Net.Client, que contiene el cliente de .NET.
- Google.Protobuf, que contiene las API de mensajes protobuf para C#.
-
Grpc.Tools, que contienen compatibilidad con herramientas de C# para archivos protobuf. El paquete de herramientas no es necesario en el runtime, de modo que la dependencia se marca con
PrivateAssets="All".
Instale los paquetes con la Consola del Administrador de paquetes (PMC) o mediante Administrar paquetes NuGet.
Opción de PMC para instalar paquetes
En Visual Studio, seleccione Herramientas>Administrador de paquetes NuGet>Consola del administrador de paquetes
En la ventana Consola del Administrador de paquetes, ejecute
cd GrpcGreeterClientpara cambiar los directorios a la carpeta que contiene los archivosGrpcGreeterClient.csproj.Ejecute los comandos siguientes:
Install-Package Grpc.Net.Client Install-Package Google.Protobuf Install-Package Grpc.Tools
Administración de la opción Paquetes NuGet para instalar paquetes
- Haga clic con el botón derecho en el proyecto en el Explorador> de solucionesAdministrar paquetes NuGet.
- Seleccione la pestaña Examinar.
- Escriba Grpc.Net.Client en el cuadro de búsqueda.
- Seleccione el paquete Grpc.Net.Client en la pestaña Examinar y seleccione Instalar.
- Repita para
Google.ProtobufyGrpc.Tools.
Agregar greet.proto
Cree una carpeta Protos en el proyecto de cliente gRPC.
Copie el archivo Protos\greet.proto del servicio gRPC Greeter en la carpeta Protos del proyecto de cliente gRPC.
Actualice el espacio de nombres del archivo
greet.protoal espacio de nombres del proyecto:option csharp_namespace = "GrpcGreeterClient";Edición del archivo del proyecto
GrpcGreeterClient.csproj:
Haga clic con el botón derecho en el proyecto y seleccione Editar archivo del proyecto.
Agregue un grupo de elementos con un
<Protobuf>elemento que haga referencia al archivo greet.proto :<ItemGroup> <Protobuf Include="Protos\greet.proto" GrpcServices="Client" /> </ItemGroup>
Creación del cliente de Greeter
- Compile el proyecto de cliente para crear los tipos en el espacio de nombres
GrpcGreeterClient.
Note
El proceso de compilación genera automáticamente los tipos GrpcGreeterClient. El paquete de herramientas Grpc.Tools genera los siguientes archivos en función del archivo greet.proto :
-
GrpcGreeterClient\obj\Debug\[TARGET_FRAMEWORK]\Protos\Greet.cs: el código de búfer de protocolo que rellena, serializa y recupera los tipos de mensaje de solicitud y respuesta. -
GrpcGreeterClient\obj\Debug\[TARGET_FRAMEWORK]\Protos\GreetGrpc.cs: contiene las clases de cliente generadas.
Para obtener más información sobre los recursos de C# generados automáticamente por Grpc.Tools, consulte gRPC services with C#: Generated C# assets (Servicios gRPC con recursos de C#: recursos de C# generados).
Actualice el archivo
Program.csdel cliente gRPC con el código siguiente.using System.Threading.Tasks; using Grpc.Net.Client; using GrpcGreeterClient; // The port number must match the port of the gRPC server. using var channel = GrpcChannel.ForAddress("https://localhost:7042"); var client = new Greeter.GreeterClient(channel); var reply = await client.SayHelloAsync( new HelloRequest { Name = "GreeterClient" }); Console.WriteLine("Greeting: " + reply.Message); Console.WriteLine("Press any key to exit..."); Console.ReadKey();En el código resaltado anterior, reemplace el número de puerto localhost
7042por el número de puertoHTTPSespecificado enProperties/launchSettings.jsondentro del proyecto de servicioGrpcGreeter.
Program.cs contiene el punto de entrada y la lógica para el cliente gRPC.
El cliente de Greeter se crea mediante lo siguiente:
- Creación de una instancia de
GrpcChannelque contiene la información para crear la conexión al servicio gRPC. - Uso de
GrpcChannelpara construir el cliente de Greeter:
// The port number must match the port of the gRPC server.
using var channel = GrpcChannel.ForAddress("https://localhost:7042");
var client = new Greeter.GreeterClient(channel);
var reply = await client.SayHelloAsync(
new HelloRequest { Name = "GreeterClient" });
Console.WriteLine("Greeting: " + reply.Message);
Console.WriteLine("Press any key to exit...");
Console.ReadKey();
El cliente de Greeter realiza una llamada al método SayHello asincrónico. Se muestra el resultado de la llamada a SayHello:
// The port number must match the port of the gRPC server.
using var channel = GrpcChannel.ForAddress("https://localhost:7042");
var client = new Greeter.GreeterClient(channel);
var reply = await client.SayHelloAsync(
new HelloRequest { Name = "GreeterClient" });
Console.WriteLine("Greeting: " + reply.Message);
Console.WriteLine("Press any key to exit...");
Console.ReadKey();
Prueba del cliente gRPC con el servicio gRPC Greeter
- En el servicio Greeter, presione
Ctrl+F5para iniciar el servidor sin el depurador. - En el proyecto
GrpcGreeterClient, presioneCtrl+F5para iniciar el cliente sin el depurador.
El cliente envía un saludo al servicio con un mensaje que contiene su nombre , GreeterClient. El servicio envía el mensaje "Hello GreeterClient" como respuesta. La respuesta "Hello GreeterClient" se muestra en el símbolo del sistema:
Greeting: Hello GreeterClient
Press any key to exit...
El servicio gRPC registra los detalles de la llamada correcta en los registros escritos en el símbolo del sistema:
info: Microsoft.Hosting.Lifetime[0]
Now listening on: https://localhost:<port>
info: Microsoft.Hosting.Lifetime[0]
Application started. Press Ctrl+C to shut down.
info: Microsoft.Hosting.Lifetime[0]
Hosting environment: Development
info: Microsoft.Hosting.Lifetime[0]
Content root path: C:\GH\aspnet\docs\4\Docs\aspnetcore\tutorials\grpc\grpc-start\sample\GrpcGreeter
info: Microsoft.AspNetCore.Hosting.Diagnostics[1]
Request starting HTTP/2 POST https://localhost:<port>/Greet.Greeter/SayHello application/grpc
info: Microsoft.AspNetCore.Routing.EndpointMiddleware[0]
Executing endpoint 'gRPC - /Greet.Greeter/SayHello'
info: Microsoft.AspNetCore.Routing.EndpointMiddleware[1]
Executed endpoint 'gRPC - /Greet.Greeter/SayHello'
info: Microsoft.AspNetCore.Hosting.Diagnostics[2]
Request finished in 78.32260000000001ms 200 application/grpc
Actualice el archivo appsettings.Development.json mediante la adición de las siguientes líneas:
"Microsoft.AspNetCore.Hosting": "Information",
"Microsoft.AspNetCore.Routing.EndpointMiddleware": "Information"
Note
El código de este artículo requiere el certificado de desarrollo de ASP.NET Core HTTPS para proteger el servicio gRPC. Si el cliente gRPC de .NET genera un error con el mensaje The remote certificate is invalid according to the validation procedure. o The SSL connection could not be established., el certificado de desarrollo no es de confianza. Para corregir este problema, consulte Llamada a un servicio gRPC con un certificado no válido o que no es de confianza.
Pasos siguientes
En este tutorial se muestra cómo crear un cliente gRPC de .NET y un servidor gRPC de ASP.NET Core.
Al final tendrá un cliente gRPC que se comunica con el servicio Greeter de gRPC.
Vea o descargue el código de ejemplo (cómo descargarlo).
En este tutorial, hizo lo siguiente:
- Crear un servicio gRPC.
- Crear un cliente gRPC.
- Prueba del cliente gRPC con el servicio gRPC Greeter.
Prerequisites
- Versión 16.8 o posterior de Visual Studio 2019 con la carga de trabajo Desarrollo web y ASP.NET
- SDK de .NET 5
Crear un servicio gRPC
- Inicie Visual Studio y seleccione Crear un proyecto.
- En el cuadro de diálogo Crear un proyecto, seleccione Servicio gRPC y elija Siguiente.
- En el cuadro de diálogo Configurar su nuevo proyecto, escriba
GrpcGreeteren Nombre del proyecto. Es importante asignar un nombre al proyecto GrpcGreeter para que los espacios de nombres coincidan al copiar y pegar código. - Seleccione Siguiente.
- En el cuadro de diálogo Información adicional , seleccione .NET 5.0 en la lista desplegable Plataforma de destino.
- Selecciona Crear.
Ejecutar el servicio
Presione Ctrl+F5 para ejecutarla sin el depurador.
Visual Studio muestra el siguiente cuadro de diálogo cuando un proyecto aún no está configurado para usar SSL:
Seleccione Sí si confía en el certificado SSL de IIS Express.
Se muestra el cuadro de diálogo siguiente:
Si acepta confiar en el certificado de desarrollo, seleccione Sí.
Para obtener información sobre cómo confiar en el explorador Firefox, consulte Error de certificado SEC_ERROR_INADEQUATE_KEY_USAGE de Firefox.
Visual Studio inicia IIS Express y ejecuta la aplicación. En la barra de direcciones aparece
localhost:port#(y no algo comoexample.com). Esto es así porquelocalhostes el nombre de host estándar del equipo local. Localhost solo sirve las solicitudes web del equipo local. Cuando Visual Studio crea un proyecto web, se usa un puerto aleatorio para el servidor web.
Los registros muestran que el servicio está escuchando en https://localhost:5001.
info: Microsoft.Hosting.Lifetime[0]
Now listening on: https://localhost:5001
info: Microsoft.Hosting.Lifetime[0]
Application started. Press Ctrl+C to shut down.
info: Microsoft.Hosting.Lifetime[0]
Hosting environment: Development
Note
La plantilla gRPC está configurada para usar Seguridad de la capa de transporte (TLS). Los clientes de gRPC necesitan usar HTTPS para llamar al servidor.
macOS no admite gRPC de ASP.NET Core con TLS. Se requiere configuración adicional para ejecutar correctamente servicios gRPC en macOS. Para obtener más información, vea No se puede iniciar la aplicación gRPC de ASP.NET Core en macOS.
Examinar los archivos de proyecto
Archivos de proyecto grpcGreeter:
-
greet.proto: el archivo Protos/greet.proto define el
GreetergRPC y se usa para generar los recursos del servidor gRPC. Para obtener más información, vea Introducción a gRPC. - Carpeta Servicios: contiene la implementación del
Greeterservicio. -
appsettings.json: contiene datos de configuración, como el protocolo que usa Kestrel. Para más información, consulte Configuración en ASP.NET Core. -
Program.cs: contiene el punto de entrada para el servicio gRPC. Para obtener más información, consulte Hospedaje genérico de .NET en ASP.NET Core. -
Startup.cs: contiene código que configura el comportamiento de la aplicación. Para obtener más información, consulte Inicio de la aplicación.
Creación del cliente gRPC en una aplicación de consola de .NET
- Abra una segunda instancia de Visual Studio y seleccione Crear un proyecto.
- En el cuadro de diálogo Crear un nuevo proyecto , seleccione Aplicación de consola (.NET) y seleccione Siguiente.
- En el cuadro de texto Nombre del proyecto , escriba GrpcGreeterClient y seleccione Crear.
Adición de paquetes necesarios
El proyecto de cliente gRPC requiere los siguientes paquetes:
- Grpc.Net.Client, que contiene el cliente de .NET.
- Google.Protobuf, que contiene las API de mensajes protobuf para C#.
-
Grpc.Tools, que contiene compatibilidad con herramientas de C# para archivos protobuf. El paquete de herramientas no es necesario en el runtime, de modo que la dependencia se marca con
PrivateAssets="All".
Instale los paquetes con la Consola del Administrador de paquetes (PMC) o mediante Administrar paquetes NuGet.
Opción de PMC para instalar paquetes
En Visual Studio, seleccione Herramientas>Administrador de paquetes NuGet>Consola del administrador de paquetes
En la ventana Consola del Administrador de paquetes, ejecute
cd GrpcGreeterClientpara cambiar los directorios a la carpeta que contiene los archivosGrpcGreeterClient.csproj.Ejecute los comandos siguientes:
Install-Package Grpc.Net.Client Install-Package Google.Protobuf Install-Package Grpc.Tools
Administración de la opción Paquetes NuGet para instalar paquetes
- Haga clic con el botón derecho en el proyecto en el Explorador> de solucionesAdministrar paquetes NuGet.
- Seleccione la pestaña Examinar.
- Escriba Grpc.Net.Client en el cuadro de búsqueda.
- Seleccione el paquete Grpc.Net.Client en la pestaña Examinar y seleccione Instalar.
- Repita para
Google.ProtobufyGrpc.Tools.
Agregar greet.proto
Cree una carpeta Protos en el proyecto de cliente gRPC.
Copie el archivo Protos\greet.proto del servicio gRPC Greeter en la carpeta Protos del proyecto de cliente gRPC.
Actualice el espacio de nombres del archivo
greet.protoal espacio de nombres del proyecto:option csharp_namespace = "GrpcGreeterClient";Edición del archivo del proyecto
GrpcGreeterClient.csproj:Haga clic con el botón derecho en el proyecto y seleccione Editar archivo del proyecto.
Agregue un grupo de elementos con un
<Protobuf>elemento que haga referencia al archivo greet.proto :<ItemGroup> <Protobuf Include="Protos\greet.proto" GrpcServices="Client" /> </ItemGroup>
Creación del cliente de Greeter
- Compile el proyecto de cliente para crear los tipos en el espacio de nombres
GrpcGreeterClient.
Note
El proceso de compilación genera automáticamente los tipos GrpcGreeterClient. El paquete de herramientas Grpc.Tools genera los siguientes archivos en función del archivo greet.proto :
-
GrpcGreeterClient\obj\Debug\[TARGET_FRAMEWORK]\Protos\Greet.cs: el código de búfer de protocolo que rellena, serializa y recupera los tipos de mensaje de solicitud y respuesta. -
GrpcGreeterClient\obj\Debug\[TARGET_FRAMEWORK]\Protos\GreetGrpc.cs: contiene las clases de cliente generadas.
Para obtener más información sobre los recursos de C# generados automáticamente por Grpc.Tools, consulte gRPC services with C#: Generated C# assets (Servicios gRPC con recursos de C#: recursos de C# generados).
Actualice el archivo
Program.csdel cliente gRPC con el código siguiente:using System; using System.Net.Http; using System.Threading.Tasks; using Grpc.Net.Client; namespace GrpcGreeterClient { class Program { static async Task Main(string[] args) { // The port number(5001) must match the port of the gRPC server. using var channel = GrpcChannel.ForAddress("https://localhost:5001"); var client = new Greeter.GreeterClient(channel); var reply = await client.SayHelloAsync( new HelloRequest { Name = "GreeterClient" }); Console.WriteLine("Greeting: " + reply.Message); Console.WriteLine("Press any key to exit..."); Console.ReadKey(); } } }
Program.cs contiene el punto de entrada y la lógica para el cliente gRPC.
El cliente de Greeter se crea mediante lo siguiente:
- Creación de una instancia de
GrpcChannelque contiene la información para crear la conexión al servicio gRPC. - Uso de
GrpcChannelpara construir el cliente de Greeter:
static async Task Main(string[] args)
{
// The port number(5001) must match the port of the gRPC server.
using var channel = GrpcChannel.ForAddress("https://localhost:5001");
var client = new Greeter.GreeterClient(channel);
var reply = await client.SayHelloAsync(
new HelloRequest { Name = "GreeterClient" });
Console.WriteLine("Greeting: " + reply.Message);
Console.WriteLine("Press any key to exit...");
Console.ReadKey();
}
El cliente de Greeter realiza una llamada al método SayHello asincrónico. Se muestra el resultado de la llamada a SayHello:
static async Task Main(string[] args)
{
// The port number(5001) must match the port of the gRPC server.
using var channel = GrpcChannel.ForAddress("https://localhost:5001");
var client = new Greeter.GreeterClient(channel);
var reply = await client.SayHelloAsync(
new HelloRequest { Name = "GreeterClient" });
Console.WriteLine("Greeting: " + reply.Message);
Console.WriteLine("Press any key to exit...");
Console.ReadKey();
}
Prueba del cliente gRPC con el servicio gRPC Greeter
- En el servicio Greeter, presione
Ctrl+F5para iniciar el servidor sin el depurador. - En el proyecto
GrpcGreeterClient, presioneCtrl+F5para iniciar el cliente sin el depurador.
El cliente envía un saludo al servicio con un mensaje que contiene su nombre , GreeterClient. El servicio envía el mensaje "Hello GreeterClient" como respuesta. La respuesta "Hello GreeterClient" se muestra en el símbolo del sistema:
Greeting: Hello GreeterClient
Press any key to exit...
El servicio gRPC registra los detalles de la llamada correcta en los registros escritos en el símbolo del sistema:
info: Microsoft.Hosting.Lifetime[0]
Now listening on: https://localhost:5001
info: Microsoft.Hosting.Lifetime[0]
Application started. Press Ctrl+C to shut down.
info: Microsoft.Hosting.Lifetime[0]
Hosting environment: Development
info: Microsoft.Hosting.Lifetime[0]
Content root path: C:\GH\aspnet\docs\4\Docs\aspnetcore\tutorials\grpc\grpc-start\sample\GrpcGreeter
info: Microsoft.AspNetCore.Hosting.Diagnostics[1]
Request starting HTTP/2 POST https://localhost:5001/Greet.Greeter/SayHello application/grpc
info: Microsoft.AspNetCore.Routing.EndpointMiddleware[0]
Executing endpoint 'gRPC - /Greet.Greeter/SayHello'
info: Microsoft.AspNetCore.Routing.EndpointMiddleware[1]
Executed endpoint 'gRPC - /Greet.Greeter/SayHello'
info: Microsoft.AspNetCore.Hosting.Diagnostics[2]
Request finished in 78.32260000000001ms 200 application/grpc
Note
El código de este artículo requiere el certificado de desarrollo de ASP.NET Core HTTPS para proteger el servicio gRPC. Si el cliente gRPC de .NET genera un error con el mensaje The remote certificate is invalid according to the validation procedure. o The SSL connection could not be established., el certificado de desarrollo no es de confianza. Para corregir este problema, consulte Llamada a un servicio gRPC con un certificado no válido o que no es de confianza.
Pasos siguientes
En este tutorial se muestra cómo crear un cliente gRPC de .NET Core y un servidor gRPC de ASP.NET Core.
Al final tendrá un cliente gRPC que se comunica con el servicio Greeter de gRPC.
Vea o descargue el código de ejemplo (cómo descargarlo).
En este tutorial, hizo lo siguiente:
- Crear un servicio gRPC.
- Crear un cliente gRPC.
- Prueba del cliente gRPC con el servicio gRPC Greeter.
Prerequisites
- Versión 16.4 o posterior de Visual Studio 2019 con la carga de trabajo Desarrollo web y ASP.NET
- SDK de .NET Core 3.1
Crear un servicio gRPC
Inicie Visual Studio y seleccione Crear un proyecto. Como alternativa, en el menú Archivo de Visual Studio, seleccione Nuevo>proyecto.
En el cuadro de diálogo Crear un proyecto, seleccione Servicio gRPC y elija Siguiente:
Asigne al proyecto el nombre GrpcGreeter. Es importante asignar un nombre al proyecto GrpcGreeter para que los espacios de nombres coincidan al copiar y pegar código.
Selecciona Crear.
En el cuadro de diálogo Crear un servicio gRPC:
- La plantilla de gRPC Service está seleccionada.
- Selecciona Crear.
Ejecutar el servicio
Presione Ctrl+F5 para ejecutarla sin el depurador.
Visual Studio muestra el siguiente cuadro de diálogo cuando un proyecto aún no está configurado para usar SSL:
Seleccione Sí si confía en el certificado SSL de IIS Express.
Se muestra el cuadro de diálogo siguiente:
Si acepta confiar en el certificado de desarrollo, seleccione Sí.
Para obtener información sobre cómo confiar en el explorador Firefox, consulte Error de certificado SEC_ERROR_INADEQUATE_KEY_USAGE de Firefox.
Visual Studio inicia IIS Express y ejecuta la aplicación. En la barra de direcciones aparece
localhost:port#(y no algo comoexample.com). Esto es así porquelocalhostes el nombre de host estándar del equipo local. Localhost solo sirve las solicitudes web del equipo local. Cuando Visual Studio crea un proyecto web, se usa un puerto aleatorio para el servidor web.
Los registros muestran que el servicio está escuchando en https://localhost:5001.
info: Microsoft.Hosting.Lifetime[0]
Now listening on: https://localhost:5001
info: Microsoft.Hosting.Lifetime[0]
Application started. Press Ctrl+C to shut down.
info: Microsoft.Hosting.Lifetime[0]
Hosting environment: Development
Note
La plantilla gRPC está configurada para usar Seguridad de la capa de transporte (TLS). Los clientes de gRPC necesitan usar HTTPS para llamar al servidor.
macOS no admite gRPC de ASP.NET Core con TLS. Se requiere configuración adicional para ejecutar correctamente servicios gRPC en macOS. Para obtener más información, vea No se puede iniciar la aplicación gRPC de ASP.NET Core en macOS.
Examinar los archivos de proyecto
Archivos de proyecto grpcGreeter:
-
greet.proto: el archivo Protos/greet.proto define el
GreetergRPC y se usa para generar los recursos del servidor gRPC. Para obtener más información, vea Introducción a gRPC. - Carpeta Servicios: contiene la implementación del
Greeterservicio. -
appsettings.json: contiene datos de configuración, como el protocolo que usa Kestrel. Para más información, consulte Configuración en ASP.NET Core. -
Program.cs: contiene el punto de entrada para el servicio gRPC. Para obtener más información, consulte Hospedaje genérico de .NET en ASP.NET Core. -
Startup.cs: contiene código que configura el comportamiento de la aplicación. Para obtener más información, consulte Inicio de la aplicación.
Creación del cliente gRPC en una aplicación de consola de .NET
- Abra una segunda instancia de Visual Studio y seleccione Crear un proyecto.
- En el cuadro de diálogo Crear un proyecto, seleccione Aplicación de consola (.NET Core) y elija Siguiente.
- En el cuadro de texto Nombre del proyecto , escriba GrpcGreeterClient y seleccione Crear.
Adición de paquetes necesarios
El proyecto de cliente gRPC requiere los siguientes paquetes:
- Grpc.Net.Client, que contiene el cliente de .NET Core.
- Google.Protobuf, que contiene las API de mensajes protobuf para C#.
-
Grpc.Tools, que contiene compatibilidad con herramientas de C# para archivos protobuf. El paquete de herramientas no es necesario en el runtime, de modo que la dependencia se marca con
PrivateAssets="All".
Instale los paquetes con la Consola del Administrador de paquetes (PMC) o mediante Administrar paquetes NuGet.
Opción de PMC para instalar paquetes
En Visual Studio, seleccione Herramientas>Administrador de paquetes NuGet>Consola del administrador de paquetes
En la ventana Consola del Administrador de paquetes, ejecute
cd GrpcGreeterClientpara cambiar los directorios a la carpeta que contiene los archivosGrpcGreeterClient.csproj.Ejecute los comandos siguientes:
Install-Package Grpc.Net.Client Install-Package Google.Protobuf Install-Package Grpc.Tools
Administración de la opción Paquetes NuGet para instalar paquetes
- Haga clic con el botón derecho en el proyecto en el Explorador> de solucionesAdministrar paquetes NuGet.
- Seleccione la pestaña Examinar.
- Escriba Grpc.Net.Client en el cuadro de búsqueda.
- Seleccione el paquete Grpc.Net.Client en la pestaña Examinar y seleccione Instalar.
- Repita para
Google.ProtobufyGrpc.Tools.
Agregar greet.proto
Cree una carpeta Protos en el proyecto de cliente gRPC.
Copie el archivo Protos\greet.proto del servicio gRPC Greeter en la carpeta Protos del proyecto de cliente gRPC.
Actualice el espacio de nombres del archivo
greet.protoal espacio de nombres del proyecto:option csharp_namespace = "GrpcGreeterClient";Edición del archivo del proyecto
GrpcGreeterClient.csproj:Haga clic con el botón derecho en el proyecto y seleccione Editar archivo del proyecto.
Agregue un grupo de elementos con un
<Protobuf>elemento que haga referencia al archivo greet.proto :<ItemGroup> <Protobuf Include="Protos\greet.proto" GrpcServices="Client" /> </ItemGroup>
Creación del cliente de Greeter
- Compile el proyecto de cliente para crear los tipos en el espacio de nombres
GrpcGreeterClient.
Note
El proceso de compilación genera automáticamente los tipos GrpcGreeterClient. El paquete de herramientas Grpc.Tools genera los siguientes archivos en función del archivo greet.proto :
-
GrpcGreeterClient\obj\Debug\[TARGET_FRAMEWORK]\Protos\Greet.cs: el código de búfer de protocolo que rellena, serializa y recupera los tipos de mensaje de solicitud y respuesta. -
GrpcGreeterClient\obj\Debug\[TARGET_FRAMEWORK]\Protos\GreetGrpc.cs: contiene las clases de cliente generadas.
Para obtener más información sobre los recursos de C# generados automáticamente por Grpc.Tools, consulte gRPC services with C#: Generated C# assets (Servicios gRPC con recursos de C#: recursos de C# generados).
Actualice el archivo Program.cs del cliente gRPC con el código siguiente:
using System;
using System.Net.Http;
using System.Threading.Tasks;
using Grpc.Net.Client;
namespace GrpcGreeterClient
{
class Program
{
static async Task Main(string[] args)
{
// The port number(5001) must match the port of the gRPC server.
using var channel = GrpcChannel.ForAddress("https://localhost:5001");
var client = new Greeter.GreeterClient(channel);
var reply = await client.SayHelloAsync(
new HelloRequest { Name = "GreeterClient" });
Console.WriteLine("Greeting: " + reply.Message);
Console.WriteLine("Press any key to exit...");
Console.ReadKey();
}
}
}
Program.cs contiene el punto de entrada y la lógica para el cliente gRPC.
El cliente de Greeter se crea mediante lo siguiente:
- Creación de una instancia de
GrpcChannelque contiene la información para crear la conexión al servicio gRPC. - Uso de
GrpcChannelpara construir el cliente de Greeter:
static async Task Main(string[] args)
{
// The port number(5001) must match the port of the gRPC server.
using var channel = GrpcChannel.ForAddress("https://localhost:5001");
var client = new Greeter.GreeterClient(channel);
var reply = await client.SayHelloAsync(
new HelloRequest { Name = "GreeterClient" });
Console.WriteLine("Greeting: " + reply.Message);
Console.WriteLine("Press any key to exit...");
Console.ReadKey();
}
El cliente de Greeter realiza una llamada al método SayHello asincrónico. Se muestra el resultado de la llamada a SayHello:
static async Task Main(string[] args)
{
// The port number(5001) must match the port of the gRPC server.
using var channel = GrpcChannel.ForAddress("https://localhost:5001");
var client = new Greeter.GreeterClient(channel);
var reply = await client.SayHelloAsync(
new HelloRequest { Name = "GreeterClient" });
Console.WriteLine("Greeting: " + reply.Message);
Console.WriteLine("Press any key to exit...");
Console.ReadKey();
}
Prueba del cliente gRPC con el servicio gRPC Greeter
- En el servicio Greeter, presione
Ctrl+F5para iniciar el servidor sin el depurador. - En el proyecto
GrpcGreeterClient, presioneCtrl+F5para iniciar el cliente sin el depurador.
El cliente envía un saludo al servicio con un mensaje que contiene su nombre , GreeterClient. El servicio envía el mensaje "Hello GreeterClient" como respuesta. La respuesta "Hello GreeterClient" se muestra en el símbolo del sistema:
Greeting: Hello GreeterClient
Press any key to exit...
El servicio gRPC registra los detalles de la llamada correcta en los registros escritos en el símbolo del sistema:
info: Microsoft.Hosting.Lifetime[0]
Now listening on: https://localhost:5001
info: Microsoft.Hosting.Lifetime[0]
Application started. Press Ctrl+C to shut down.
info: Microsoft.Hosting.Lifetime[0]
Hosting environment: Development
info: Microsoft.Hosting.Lifetime[0]
Content root path: C:\GH\aspnet\docs\4\Docs\aspnetcore\tutorials\grpc\grpc-start\sample\GrpcGreeter
info: Microsoft.AspNetCore.Hosting.Diagnostics[1]
Request starting HTTP/2 POST https://localhost:5001/Greet.Greeter/SayHello application/grpc
info: Microsoft.AspNetCore.Routing.EndpointMiddleware[0]
Executing endpoint 'gRPC - /Greet.Greeter/SayHello'
info: Microsoft.AspNetCore.Routing.EndpointMiddleware[1]
Executed endpoint 'gRPC - /Greet.Greeter/SayHello'
info: Microsoft.AspNetCore.Hosting.Diagnostics[2]
Request finished in 78.32260000000001ms 200 application/grpc
Note
El código de este artículo requiere el certificado de desarrollo de ASP.NET Core HTTPS para proteger el servicio gRPC. Si el cliente gRPC de .NET genera un error con el mensaje The remote certificate is invalid according to the validation procedure. o The SSL connection could not be established., el certificado de desarrollo no es de confianza. Para corregir este problema, consulte Llamada a un servicio gRPC con un certificado no válido o que no es de confianza.