Este artículo es un artículo espejo de traducción automática, por favor haga clic aquí para saltar al artículo original.

Vista: 59053|Respuesta: 9

[.NET Core] Combate práctico: ASP.NET Core utiliza comunicación gRPC

[Copiar enlace]
Publicado en 11/11/2019 10:55:26 | | | |
grpc(El inicio de sesión del hipervínculo es visible.) es un framework RPC (Remote Procedure Call) de propósito general y de código abierto, publicado por Google, que utiliza el protocolo HTTP/2, soporta multiplexación y utiliza ProtoBuf como herramienta de serialización para ofrecer soporte tanto en lenguajes como en plataformas y en lenguajes.
gRPC es un framework de llamadas a procedimientos remotos (RPC) de alto rendimiento que es independiente del lenguaje.

Los principales beneficios de gRPC son:

  • Marco RPC moderno, de alto rendimiento y ligero.
  • Desarrollo de API con enfoque contractual que utiliza búferes de protocolo por defecto, permitiendo implementaciones independientes del lenguaje.
  • Herramientas disponibles en múltiples idiomas para generar servidores y clientes con tipes fuertes.
  • Soporta llamadas de cliente, servidor y streaming bidireccional.
  • Reducir el uso de la red con serialización binaria Protobuf.


Este artículo comienza con . Net Core utiliza el protocolo gRPC para la comunicación tanto en el lado del cliente como en el servidor.

Crear un servidor gRPC

Inicia Visual Studio y selecciona Crear Nuevo Proyecto. Alternativamente, selecciona Proyecto de Nuevo > en el menú de archivos de Visual Studio.

En el cuadro de diálogo Crear Nuevo Proyecto, selecciona Servicio gRPC y luego selecciona Siguiente:




Después de que se complete la creación, como se muestra en la siguiente figura:




Crear un cliente gRPC

Abre una segunda instancia de Visual Studio y selecciona Crear un nuevo proyecto.
En el cuadro de diálogo Crear Nuevo Proyecto, selecciona Consola App (.NET Core) y luego selecciona Siguiente.
En el cuadro de texto Nombre, introduce gRPC-Client y luego selecciona Crear.


Añade el paquete necesario

El proyecto cliente gRPC requiere los siguientes paquetes:
Grpc.Net.Client, que contiene el cliente .NET Core.
Google.Protobuf contiene mensajes Protobuf para C#.
Grpc.Tools incluye soporte para herramientas C# para archivos Protobuf. El kit de herramientas no es necesario en tiempo de ejecución, por lo que las dependencias se marcan como PrivateAssets="All".




Añadir greet.proto

Crea una carpeta Protos en tu proyecto cliente gRPC.
Copia el archivo Protos\greet.proto desde el servicio de saludo gRPC al proyecto cliente gRPC.

Edita el archivo de proyecto gRPC-Client.csproj, añade el grupo de elementos con el elemento que hace referencia al archivo <Protobuf> greet.proto:





Crear un cliente de Recibidor

Actualizar el archivo Program.cs del cliente gRPC con el siguiente código:





Instancia el GrpcChannel para que contenga la información utilizada para crear una conexión con el servicio gRPC.
Construye un cliente Greeter usando GrpcChannel.
El cliente Recibidor llama al método SayHello. Se muestra el resultado de la llamada SayHello.




Crea tu propia comunicación con archivos .proto

Crea un nuevo archivo userinfo.proto bajo la carpeta Protos del servicio, definido de la siguiente manera:


gRPC utiliza un enfoque basado en el contrato para el desarrollo de APIs. Define servicios y mensajes en el archivo *.proto.

Edita el archivo de proyecto GrpcService1.csproj, añade el <Protobuf> grupo de elementos con el elemento que hace referencia al archivo userinfo.proto:

<Proyecto Sdk="Microsoft.NET.Sdk.Web">

  <PropertyGroup>
    <TargetFramework>netcoreapp3.0</TargetFramework>
  </PropertyGroup>

  <ItemGroup>
    <Protobuf Include="Protos\greet.proto" GrpcServices="Server" />
    <Protobuf Include="Protos\userinfo.proto" GrpcServices="Server" />
  </ItemGroup>

  <ItemGroup>
    <PackageReferenceInclude="Grpc.AspNetCore" Versión="2.23.1" />
  </ItemGroup>

</Project>


Crea un nuevo archivo UserInfoService.cs en la carpeta Services, el código es el siguiente:

Registra el servicio UserInfoService en Startup.cs con el siguiente código:

Dejando de lado el cliente, por supuesto, tienes que copiar el archivo userinfo.proto más adelante, y el código es el siguiente:

Valor de devolución:

¡Hola mundo!
Respuesta: Hola itsvse.com
{ "id": "1", "name": "architect", "age": 5, "isVip": true }
{ "id": "2", "name": "itsvse.com", "age": 5 }
Excepción no gestionada. Grpc.Core.RpcException: Status(StatusCode=Cancelled, Detail="No se ha devuelto mensaje del método.")
   en Grpc.Net.Client.Internal.HttpClientCallInvoker.BlockingUnaryCall[TRequest,TResponse](método Method'2, String host, opciones de llamada, solicitud TRequest)
   en Grpc.Core.Interceptores.InterceptingCallInvoker. <BlockingUnaryCall>b__3_0[TRequest,TResponse](TRequest requis, ClientInterceptorContext'2 ctx)
   en Grpc.Core.ClienteBase.ClienteBaseConfiguración.ClienteBaseConfiguraciónInterceptor.BloqueandoUnaryLlamada[TRequest,TResponse](Solicitud TRequest, ClienteInterceptorContexto'2 contexto, BlockingUnaryCallContinuation'2 continuación)
   en Grpc.Core.Interceptors.InterceptingCallInvoker.BlockingUnaryCall[TRequest,TResponse](Método Method'2, String host, opciones de llamadas, solicitud TRequest)
   at UserInfo.UserInfoClient.GetUserInfo(solicitud GetUserInfoRequest, opciones CallOptions) en C:\Users\DELL\source\repos\GrpcService1\gRPC-Client\obj\Debug\netcoreapp3.0\ UserinfoGrpc.cs:línea 62
   en UserInfo.UserInfoClient.GetUserInfo(solicitud GetUserInfoRequest, cabeceras de metadatos, fecha límite Nullable'1, cancellationToken cancellationToken) en C: \Users\DELL\source\repos\GrpcService1\gRPC-Client\obj\Debug\netcoreapp3.0\UserinfoGrpc.cs:line 58
   en gRPC_Client.Program.Main(String[] args) en C:\Users\DELL\source\repos\GrpcService1\gRPC-Client\Program.cs:line 20
Por favor, pulse cualquier tecla para continuar...


Cuando el valor de retorno es nulo, el cliente lanza una excepción.


Fiddler, coge la bolsa

Para intentar usar Fiddler para capturar paquetes, primero configura el proxy en el cliente de la siguiente manera (de hecho, no puedes configurarlo, solo abre Fiddler directamente):

Error en el lado del servidor:

fail: Microsoft.AspNetCore.Server.Kestrel[0]
      HTTP/2 sobre TLS no se negociaba en un punto final solo HTTP/2.
Error del cliente:

Excepción no gestionada. Grpc.Core.RpcException: Status(StatusCode=Internal, Detail="Respuesta gRPC mala. Protocolo de respuesta degradado a HTTP/1.1.")
   en Grpc.Net.Client.Internal.HttpClientCallInvoker.BlockingUnaryCall[TRequest,TResponse](método Method'2, String host, opciones de llamada, solicitud TRequest)
   en Grpc.Core.Interceptores.InterceptingCallInvoker. <BlockingUnaryCall>b__3_0[TRequest,TResponse](TRequest requis, ClientInterceptorContext'2 ctx)
   en Grpc.Core.ClienteBase.ClienteBaseConfiguración.ClienteBaseConfiguraciónInterceptor.BloqueandoUnaryLlamada[TRequest,TResponse](Solicitud TRequest, ClienteInterceptorContexto'2 contexto, BlockingUnaryCallContinuation'2 continuación)
   en Grpc.Core.Interceptors.InterceptingCallInvoker.BlockingUnaryCall[TRequest,TResponse](Método Method'2, String host, opciones de llamadas, solicitud TRequest)
   at UserInfo.UserInfoClient.GetUserInfo(solicitud GetUserInfoRequest, opciones CallOptions) en C:\Users\DELL\source\repos\GrpcService1\gRPC-Client\obj\Debug\netcoreapp3.0\ UserinfoGrpc.cs:línea 62
   en UserInfo.UserInfoClient.GetUserInfo(solicitud GetUserInfoRequest, cabeceras de metadatos, fecha límite Nullable'1, cancellationToken cancellationToken) en C: \Users\DELL\source\repos\GrpcService1\gRPC-Client\obj\Debug\netcoreapp3.0\UserinfoGrpc.cs:line 58
   en gRPC_Client.Program.Main(String[] args) en C:\Users\DELL\source\repos\GrpcService1\gRPC-Client\Program.cs:línea 23
Por favor, pulse cualquier tecla para continuar...


Dirección postal: https://localhost:5001/UserInfo/GetUserInfo

Contenido:

Host: localhost:5001
User-Agent: grpc-dotnet/2.25.0.0
TE: trailers
grpc-accept-encoding: identity,gzip
Content-Type: application/grpc
Content-Length: 7
Fiddler-Encoding: base64


Finalmente, adjunta el código fuente:

Turistas, si queréis ver el contenido oculto de esta publicación, por favorRespuesta


(Fin)




Anterior:Refinamiento del programador: De novato a ingeniero PDF completo
Próximo:100 música de olla sin pérdida
Publicado en 11/11/2019 17:46:30 |
ASP.NET Core utiliza comunicación gRPC
Publicado en 28/11/2019 15:14:53 |
ASP.NET Core utiliza comunicación gRPC
Publicado en 28/11/2019 15:15:25 |
ASP.NET Core utiliza comunicación gRPC
Publicado en 2/12/2020 15:52:18 |
¿Cómo solucionaste este último error?
Publicado en 7/12/2020 20:37:56 |
usando Grpc.Core;
usando Microsoft.Extensions.Logging;
usando Sistema;
usando System.Collections.Generic;
usando System.Linq;
usando System.Threading.Tasks;

espacio de nombres GrpcService1
{
    clase pública UserInfoService : UserInfo.UserInfoBase
    {
        privado solo lectura<UserInfoService> _logger;
        lista privada<UserInfoReply> estática userInfoRespondies = nueva Lista<UserInfoReply>();
        UserInfoService() estático
        {
            userInfoReplies.Add(nuevo UserInfoReply()
            {
                Id = 1,
                Nombre = "Arquitecto",
                Edad = 5,
                IsVip = verdadero
            });
            userInfoReplies.Add(nuevo UserInfoReply()
            {
                Id = 2,
                Nombre = "itsvse.com",
                Edad = 5,
                IsVip = falso
            });
            userInfoReplies.Add(nuevo UserInfoReply()
            {
                Id = 3,
                Nombre = "Pequeña escoria",
                Edad = 1,
                IsVip = falso
            });
        }
        public UserInfoService(<UserInfoService>ILogger logger)
        {
            _logger = leñador;
        }

        Dominio público<UserInfoReply> TaskGetUserInfo(solicitud GetUserInfoRequest, contexto ServerCallContext)
        {
            return Task.Run(() =>
            {
                return userInfoRerespondes.SingleOrDefault(x => x.Id == solicitud. Id);
            });
        }
    }
}
Publicado en 7/12/2020 21:06:17 |
en System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   en System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(tarea de la tarea)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(tarea de tarea)
   at System.Runtime.CompilerServices.TaskAwaiter'1.GetResult()
   en Grpc.Net.Client.Internal.HttpClientCallInvoker.BlockingUnaryCall[TRequest,TResponse](método Method'2, String host, opciones de llamada, solicitud TRequest)
   en Grpc.Core.Interceptores.InterceptingCallInvoker. <BlockingUnaryCall>b__3_0[TRequest,TResponse](TRequest requis, ClientInterceptorContext'2 ctx)
   en Grpc.Core.ClienteBase.ClienteBaseConfiguración.ClienteBaseConfiguraciónInterceptor.BloqueandoUnaryLlamada[TRequest,TResponse](Solicitud TRequest, ClienteInterceptorContexto'2 contexto, BlockingUnaryCallContinuation'2 continuación)
   en Grpc.Core.Interceptors.InterceptingCallInvoker.BlockingUnaryCall[TRequest,TResponse](Método Method'2, String host, opciones de llamadas, solicitud TRequest)
Publicado en 25/5/2021 11:37:34 |
Está muy bien escrito, elogios y elogios
Publicado en 5/6/2021 11:45:21 |
ASP.NET Core utiliza comunicación gRPC
 Propietario| Publicado en 13/8/2025 15:25:35 |
Usa Postman para probar (depurar) el servicio gRPC
https://www.itsvse.com/thread-11053-1-1.html
Renuncia:
Todo el software, materiales de programación o artículos publicados por Code Farmer Network son únicamente para fines de aprendizaje e investigación; El contenido anterior no se utilizará con fines comerciales o ilegales; de lo contrario, los usuarios asumirán todas las consecuencias. La información de este sitio proviene de Internet, y las disputas de derechos de autor no tienen nada que ver con este sitio. Debes eliminar completamente el contenido anterior de tu ordenador en un plazo de 24 horas desde la descarga. Si te gusta el programa, por favor apoya el software genuino, compra el registro y obtén mejores servicios genuinos. Si hay alguna infracción, por favor contáctanos por correo electrónico.

Mail To:help@itsvse.com