weiweiworld 2025-01-08 14:59 采纳率: 0%
浏览 13

.NET GRPC调用问题

#C# Grpc 服务端调用问题
#最近在学习grpc,现在遇到一个问题,就是除了用特定的客户端去调用服务端外,能不能用httpclient的方式去调用服务端?有的话给个链接或贴一下代码,谢谢各位大师

  • 写回答

2条回答 默认 最新

  • 道友老李 JWE233286一种基于机器视觉的水表指针读数识别及修正的方法 专利发明者 2025-01-08 15:00
    关注
    让【道友老李】来帮你解答,本回答参考gpt编写,并整理提供,如果还有疑问可以点击头像关注私信或评论。
    如果答案让您满意,请采纳、关注,非常感谢!
    在grpc中,虽然通常使用特定的客户端生成的代码来调用服务端,但也可以通过HTTP方式调用服务端。为了实现这一点,可以使用grpc-gateway来将grpc服务转换为RESTful接口,然后通过HTTP客户端调用。 下面是一个简单的示例来演示如何使用grpc-gateway在C#中调用grpc服务端: 首先,在proto文件中定义服务和消息:
    syntax = "proto3";
    package your_package_name;
    service YourService {
      rpc YourMethod (YourRequest) returns (YourResponse) {}
    }
    message YourRequest {
      string message = 1;
    }
    message YourResponse {
      string message = 1;
    }
    

    然后,使用gRPC的工具来生成C#代码和grpc-gateway代码:

    grpc_tools_cpp_protoc.exe --proto_path=. --cpp_out=. --grpc_out=. --plugin=protoc-gen-grpc=/path/to/grpc_cpp_plugin your_proto.proto
    

    在服务端实现YourService服务:

    public class YourService : YourService.YourServiceBase
    {
        public override Task<YourResponse> YourMethod(YourRequest request, ServerCallContext context)
        {
            return Task.FromResult(new YourResponse { Message = "Hello, " + request.Message });
        }
    }
    var server = new Server
    {
        Services = { YourService.BindService(new YourService()) },
        Ports = { new ServerPort("localhost", 50051, ServerCredentials.Insecure) }
    };
    server.Start();
    

    运行grpc-gateway来转换grpc服务为RESTful接口:

    protoc -I. your_proto.proto --grpc-gateway_out=logtostderr=true:.
    

    最后,通过HTTP客户端调用转换后的RESTful接口:

    var client = new HttpClient();
    var response = await client.PostAsync("http://localhost:8080/yourpackage.YourService/YourMethod", 
        new StringContent("{\"message\": \"World\"}", Encoding.UTF8, "application/json"));
    var content = await response.Content.ReadAsStringAsync();
    Console.WriteLine(content);
    

    希望这个例子能帮助你解决问题。grpc-gateway提供了一种方便的方式来通过HTTP调用grpc服务端。

    评论

报告相同问题?

问题事件

  • 创建了问题 1月8日