将 Postman 与 gRPC 结合使用

问题描述 投票:0回答:2

我有以下“hello world”gRPC 服务在 c#、VS 2022 控制台客户端中工作,调用 http 和 https 端点;但在使用 Windows 版 Postman(版本 9.21.3)调用相同端点时出现错误。

原型:

service Greeter {
  // Sends a greeting
  rpc SayHello (HelloRequest) returns (HelloReply);
}

// The request message containing the user's name.
message HelloRequest {
  string name = 1;
}

// The response message containing the greetings.
message HelloReply {
  string message = 1;
}

发布http://localhost:5046/Greeter/SayHello

body > raw > {“名称”:“测试 grpc http”}

邮递员响应 ->“解析错误:服务器返回格式错误的响应”

postman 控制台 ->“错误:解析错误:预期 HTTP/”c# grpc 服务器控制台 -> 无


发布 https://localhost:7046/Greeter/SayHello

body > raw > {“Name”:“测试 grpc HTTPS”} 邮递员响应 - >“错误:套接字挂起”

c# grpc 服务器控制台 ->“未在仅 HTTP/2 端点上协商基于 TLS 的 HTTP/2。”

有人成功使用 c#/VS2022/Postman 堆栈吗?

更新

我现在正在通过@LaurentGabiot 在此处发布的链接创建我的请求: https://blog.postman.com/postman-now-supports-grpc/

现在我的两个 http/https 端点都遇到相同的错误:

“错误:协议无效:https”

在他们的示例中,他们的端点是:“grpcb.in:9000”,无论这意味着什么。不知道如何在 Vs2022/c# 中做到这一点。

注意:我将保留原来的错误(上面),以防其他人以与我相同的方式创建他们的请求。

c# postman grpc visual-studio-2022
2个回答
2
投票

只需输入不带方案的 URL 作为服务器 URL,即

localhost:5046


0
投票

了解 Postman 中的 gRPC

Postman 最近引入了对 gRPC 的支持。然而,gRPC 与基于 REST 或 HTTP 的服务有本质上的不同。 gRPC 使用 HTTP/2 协议和 protobuf 来处理消息,如果您习惯于传统的 HTTP 方法,设置可能会有点棘手。

使用 Postman 测试 gRPC 服务的步骤

  1. 确保您使用的是正确版本的 Postman:

    • 确保您已更新到支持 gRPC 的版本。您提到您正在使用版本 9.21.3,它应该支持 gRPC。
  2. 为 gRPC 设置 Postman :

    • 打开邮递员。
    • 单击“新建”按钮并选择“gRPC 请求”。
    • 在 URL 字段中,输入 gRPC 端点。例如,如果您的服务器在端口
      localhost
      上的
      5046
      上运行,您将输入:
      localhost:5046
  3. 导入.proto文件:

    • 单击“导入”按钮并选择您的服务的 .proto 文件。 Postman 将使用此文件来了解可用于您的 gRPC 服务的方法和消息。
  4. 选择服务和方式:

    • 导入 .proto 文件后,您应该看到服务和方法的列表。选择
      Greeter
      作为服务,选择
      SayHello
      作为方法。
  5. 创建请求:

    • 选择方法后,Postman将根据.proto定义自动生成请求体。
    • 您可以填写请求信息。对于您的服务,它会是这样的:
      {
        "name": "testing grpc http"
      }
      
    • 注意:确保字段名称与 .proto 文件中定义的名称完全匹配。
  6. 发送请求:

    • 单击“发送”按钮将请求发送到您的 gRPC 服务器。

常见问题和修复

  1. 错误:解析错误:预期 HTTP/

    • 如果您尝试向 gRPC 端点发送传统 HTTP 请求,通常会发生此错误。确保您正在使用 Postman 中的 gRPC 请求功能。
  2. 错误:协议无效:https

    • 确保您使用正确的协议。对于基于 TLS 的 gRPC,请确保您的服务器已正确配置为支持带有 TLS 的 HTTP/2。
  3. 未协商基于 TLS 的 HTTP/2 :

    • 此错误表明您的服务器正在等待 HTTP/2 连接,但没有收到连接。确保您的 Postman 请求设置为使用 HTTP/2。

服务器配置

确保 C# 中的 gRPC 服务器配置为正确处理 HTTP/2 和基于 TLS 的 HTTP/2。这是一个基本示例:

public class Program
{
    public static void Main(string[] args)
    {
        CreateHostBuilder(args).Build().Run();
    }

    public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
            .ConfigureWebHostDefaults(webBuilder =>
            {
                webBuilder.UseStartup<Startup>();
            });
}

public class Startup
{
    public void ConfigureServices(IServiceCollection services)
    {
        services.AddGrpc();
    }

    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }

        app.UseRouting();

        app.UseEndpoints(endpoints =>
        {
            endpoints.MapGrpcService<GreeterService>();

            endpoints.MapGet("/", async context =>
            {
                await context.Response.WriteAsync("Communication with gRPC endpoints must be made through a gRPC client. To learn how to create a client, visit: https://go.microsoft.com/fwlink/?linkid=2086909");
            });
        });
    }
}

public class GreeterService : Greeter.GreeterBase
{
    private readonly ILogger<GreeterService> _logger;
    public GreeterService(ILogger<GreeterService> logger)
    {
        _logger = logger;
    }

    public override Task<HelloReply> SayHello(HelloRequest request, ServerCallContext context)
    {
        return Task.FromResult(new HelloReply
        {
            Message = "Hello " + request.Name
        });
    }
}

备注:

  • 确保您的应用程序正在运行并侦听您指定的端口。
  • 对于 HTTPS,请确保您的服务器证书已正确配置并受到 Postman 设置的信任。

其他提示:

  • 使用 gRPC 客户端进行测试
    grpcurl
    或 gRPC 命令行客户端等工具可以帮助诊断独立于 Postman 的问题。
  • 日志记录:在服务器和客户端上启用详细日志记录,以捕获有关请求和响应的更多信息。

遵循这些步骤应该可以帮助您使用 Postman 正确设置和测试 gRPC 服务。

© www.soinside.com 2019 - 2024. All rights reserved.