目录

记.net-core-8-集成-grpc

目录

记.net core 8 集成 grpc

1、创建一个grpc服务

https://i-blog.csdnimg.cn/direct/b073b4363d954021ae62df3a621e4aa1.png

2、编写一个test.proto文件

https://i-blog.csdnimg.cn/direct/a2135e3bf4df46e985953aa7d848cc71.png

syntax = "proto3";

option csharp_namespace = "GrpcService";

package test;

service TestPro{
	rpc Test01 (TestRequest) returns (TestResult);
}

//返回结果
message TestResult{
	string name =1;
	string password = 2;
}

//返回结果
message TestRequest{
	string name =1;
	string password = 2;
}

3、在项目文件中加上路径

https://i-blog.csdnimg.cn/direct/022c55833abc4aa58cbaac3fbe9b04a1.png

4、点击生成将会看到自动生成的cs文件

https://i-blog.csdnimg.cn/direct/5097081aac7d4241a399b212726033e6.png

注:如果未自动生成代表存在问题

5、编写服务

https://i-blog.csdnimg.cn/direct/4dc89f3f3d4149ac93c3528c20e4d16a.png

public class Test01Service : TestPro.TestProBase
{
    public override Task<TestResult> Test01(TestRequest request, ServerCallContext context)
    {
        return Task.FromResult(new TestResult()
        {
            Name = request.Name,
            Password = request.Password,
        });
    }
}

6、运行,成功后创建一个客户端,无论是不是grpc工程都可以。添加包

https://i-blog.csdnimg.cn/direct/3ccdb0a0c1794c5889b8fe298358cf01.png

7、将上传创建的服务端的文件拷贝过来,并在项目文件中添加路径

https://i-blog.csdnimg.cn/direct/518b8b9786434a798b502f3d69f330e9.png

https://i-blog.csdnimg.cn/direct/dea63cb8d27047da8952bee9db07460b.png

8、创建api然后运行

/// <summary>
/// grpc调用测试
/// </summary>
/// <returns></returns>
[HttpGet("testGrpc01")]
//可以返回的状态码
[ProducesResponseType(StatusCodes.Status200OK)]
[ProducesResponseType(StatusCodes.Status400BadRequest)]
//swagger归属不同版本
[ApiExplorerSettings(GroupName = "v2")]
public string TestGrpc01()
{
    string url = "http://localhost:5123";

    using (var channel = GrpcChannel.ForAddress(url))
    {
        var client = new TestPro.TestProClient(channel);
        var reply = client.Test01(new TestRequest()
        {
            Name = "Test传递",
            Password = "passwordc传递"
        });

        Console.WriteLine($"密码:{reply.Password},name:{reply.Name}");
    }

    return "ok";
}