3.3、客户端编译生成grpc类
1. 在“解决方案资源管理器”中,使用鼠标左键选中项目名称“demo.grpc.cmd”,然后单击鼠标右键,在弹出的快捷菜单中选择“重新生成”菜单项。
2. 在“解决方案资源管理器”中,使用鼠标左键选中项目名称“demo.grpc.cmd,在弹出的快捷菜单中选择“在文件资源管理器中打开文件夹”菜单项。如下图。

3.我们打开“文件资源管理器”,进入到demo.grpc.cmd\obj\debug\ net7.0目录,发现此时目录下也有与服务端一样的4个.cs文件,就是grpc协议文件对应的类文件,如下图所示:

3.4、grpc服务的https调用
1.在服务端项目(demo.grpcservice)中,由visual studio 2022在创建项目时默认配置了两个地址,让我们来调用。2个地址分别为:http://localhost:5209和https://localhost:7149, grpc客户端会使用到这2个地址,目的是给客户端请求请求地址,服务端将监听这两个端口。
2. 在visual studio 2022的“解决方案资源管理器”中,使用鼠标右键单击“demo.grpc.cmd”项目名称,在弹出菜单中选择“添加--> 类”。 在“添加新项”对话框中将类命名为 user,然后选择“添加”。
3. 在visual studio 2022的“解决方案资源管理器”中,使用鼠标双击打开刚才创建的user.cs文件,添加如下代码:
using system;
using system.collections.generic;
using system.linq;
using system.text;
using system.text.json;
using system.threading.tasks;
using grpc.net.client;
using demo.grpcservice.protos;
namespace demo.grpc.cmd
{
public class user
{
public void getuserinfo()
{
// 使用https
const string urlhttps = "https://localhost:7149";
using (var channel = grpcchannel.foraddress(urlhttps))
{
var client = new userinfo.userinfoclient(channel);
userinforesult userinfo = client.getuserinfo(new userinforequest()
{
username = "admin",
password = "12345"
});
//打印服务方法返回的结果
console.writeline($"{userinfo.username},{userinfo.age},{userinfo.name}");
console.writeline( jsonserializer.serialize(userinfo));
}
// return string.empty;
console.readkey();
}
}
}
4. 在visual studio 2022的“解决方案资源管理器”中,使用鼠标双击打开program.cs文件,添加如下代码:
/ 、see https://aka.ms/new-console-template for more information
using demo.grpc.cmd;
console.writeline("hello, world!");
new user().getuserinfo();
5.我们在开启一个visual studio 2022,打开“demo.grpcservice”解决方案,将“demo.grpcservice”设置为启动项目,并使用https协议启动运行。

6.启动运行之后的结果如图。

7.我们切换到“demo.grpc.cmd”为启动项目visual studio 2022,按f5,启动。

8.启动之后的运行结果,如图。

到此,调用grpc服务端提供的https地址就成功了。
3.5、grpc服务的http调用
相比https的调用,我们只需要在调用前加上如下代码即可:
|
|
appcontext.setswitch("system.net.http.socketshttphandler.http2unencryptedsupport", true); |
1. 在visual studio 2022的“解决方案资源管理器”中,使用鼠标双击打开user.cs文件,添加如下代码:
using system;
using system.collections.generic;
using system.linq;
using system.text;
using system.text.json;
using system.threading.tasks;
using grpc.net.client;
using demo.grpcservice.protos;
namespace demo.grpc.cmd
{
public class user
{
public void getuserinfo()
{
//使用http
appcontext.setswitch("system.net.http.socketshttphandler.http2unencryptedsupport", true);
const string urlhttp = "http://localhost:5209";
using (var channel = grpcchannel.foraddress(urlhttp))
// 使用https
// const string urlhttps = "https://localhost:7149";
// using (var channel = grpcchannel.foraddress(urlhttps))
{
var client = new userinfo.userinfoclient(channel);
userinforesult userinfo = client.getuserinfo(new userinforequest()
{
username = "admin",
password = "12345"
});
//打印服务方法返回的结果
console.writeline($"{userinfo.username},{userinfo.age},{userinfo.name}");
console.writeline( jsonserializer.serialize(userinfo));
}
// return string.empty;
console.readkey();
}
}
}
2.在目visual studio 2022,按f5或是点击工具栏上的“运行”按钮,启动“demo.grpc.cmd”控制台程序。

到此,调用grpc服务端提供的http地址就成功了。
运行效果如下:

发表评论