static async Task Main(string[] args) { var serviceName = "grpctest"; var consulClient = new ConsulClient(c => c.Address = new Uri("http://localhost:8500")); var services = await consulClient.Catalog.Service(serviceName); if (services.Response.Length == 0) { throw new Exception($"未发现服务 {serviceName}"); } var service = services.Response[0]; var address = $"http://{service.ServiceAddress}:{service.ServicePort}"; Console.WriteLine($"获取服务地址成功:{address}"); //启用通过http使用http2.0 AppContext.SetSwitch( "System.Net.Http.SocketsHttpHandler.Http2UnencryptedSupport", true); var channel = GrpcChannel.ForAddress(address); var catClient = new LuCat.LuCatClient(channel); var catReply = await catClient.SuckingCatAsync(new Empty()); Console.WriteLine("调用撸猫服务:" + catReply.Message); Console.ReadKey(); }
static async Task Main(string[] args) { Console.WriteLine("gRPC Client Start.."); var channel = GrpcChannel.ForAddress("https://localhost:5001"); //var client = new Greeter.GreeterClient(channel); //var reply = client.SayHelloAsync(new HelloRequest { Name = "Sora" }); //Console.WriteLine("Greeter 服务返回数据: " + reply.Message); var catClient = new LuCat.LuCatClient(channel); var catReply = await catClient.SuckingCatAsync(new SuckingCatRequest { Name = "Haru" }); Console.WriteLine("Cat 服务返回数据: " + catReply.Name); catReply = await catClient.JumpCatAsync(new SuckingCatRequest { Name = "贪生怕死角斗士" }); Console.WriteLine("Cat 服务返回数据: " + catReply.Name); catReply = await catClient.JumpCatAsync(new SuckingCatRequest { Name = "勇往直前少女心" }); Console.WriteLine("Cat 服务返回数据: " + catReply.Name); Console.ReadKey(); }
static async Task Main(string[] args) { var channel = GrpcChannel.ForAddress("https://localhost:5001"); // var client = new Greeter.GreeterClient(channel); // var reply = await client.SayHelloAsync( // new HelloRequest { Name = "晓晨" }); // Console.WriteLine("调用Greeter服务 : " + reply.Message); var catClient = new LuCat.LuCatClient(channel); // var catReply = await catClient.SuckingCatAsync(new Empty()); // Console.WriteLine("调用撸猫服务:"+ catReply.Message); //获取猫总数 var catCount = await catClient.CountAsync(new Empty()); Console.WriteLine($"一共{catCount.Count}只猫。"); var rand = new Random(DateTime.Now.Millisecond); var cts = new CancellationTokenSource(); //指定在2.5s后进行取消操作 cts.CancelAfter(TimeSpan.FromSeconds(2.5)); var bathCat = catClient.BathTheCat(cancellationToken: cts.Token); //定义接收吸猫响应逻辑 var bathCatRespTask = Task.Run(async() => { try { await foreach (var resp in bathCat.ResponseStream.ReadAllAsync()) { Console.WriteLine(resp.Message); } } catch (RpcException ex) when(ex.StatusCode == StatusCode.Cancelled) { Console.WriteLine("Stream cancelled."); } }); //随机给10个猫洗澡 for (int i = 0; i < 10; i++) { await bathCat.RequestStream.WriteAsync(new BathTheCatReq() { Id = rand.Next(0, catCount.Count) }); } //发送完毕 await bathCat.RequestStream.CompleteAsync(); Console.WriteLine("客户端已发送完10个需要洗澡的猫id"); Console.WriteLine("接收洗澡结果:"); //开始接收响应 await bathCatRespTask; Console.WriteLine("洗澡完毕"); }
static async Task ClientInterceptorTest() { //客户端拦截器 var channel = GrpcChannel.ForAddress("https://localhost:5001"); var invoker = channel.Intercept(new ClientLoggerInterceptor()); var catClient = new LuCat.LuCatClient(invoker); var catReply = await catClient.SuckingCatAsync(new Empty()); Console.WriteLine("调用撸猫服务:" + catReply.Message); }
static async Task ClientTest() { //在gRPC实际使用中,在内网通讯场景下,更多的是走http协议,达到更高的效率 //启用通过http使用http2.0 AppContext.SetSwitch( "System.Net.Http.SocketsHttpHandler.Http2UnencryptedSupport", true); var channel = GrpcChannel.ForAddress("http://localhost:5001"); var catClient = new LuCat.LuCatClient(channel); var catReply = await catClient.SuckingCatAsync(new Empty()); Console.WriteLine("调用撸猫服务:" + catReply.Message); }
static async Task Main(string[] args) { var channel = GrpcChannel.ForAddress("https://localhost:5001"); var client = new Greeter.GreeterClient(channel); var reply = await client.SayHelloAsync( new HelloRequest { Name = "晓晨" }); Console.WriteLine("调用Greeter服务 : " + reply.Message); var catClient = new LuCat.LuCatClient(channel); var catReply = await catClient.SuckingCatAsync(new Empty()); Console.WriteLine("调用撸猫服务:" + catReply.Message); Console.ReadKey(); }
static async Task Main(string[] args) { // discover endpoints from metadata var client = new HttpClient(); var disco = await client.GetDiscoveryDocumentAsync("http://localhost:5000"); if (disco.IsError) { Console.WriteLine(disco.Error); return; } // request token var tokenResponse = await client.RequestPasswordTokenAsync(new PasswordTokenRequest { Address = disco.TokenEndpoint, ClientId = "ro.client", ClientSecret = "secret", UserName = "******", Password = "******", Scope = "grpc1" }); if (tokenResponse.IsError) { Console.WriteLine(tokenResponse.Error); return; } Console.WriteLine(tokenResponse.Json); Console.WriteLine("\n\n"); var channel = GrpcChannel.ForAddress("https://localhost:5001"); var headers = new Metadata { { "Authorization", $"Bearer {tokenResponse.Json["access_token"]}" } }; var catClient = new LuCat.LuCatClient(channel); var catReply = await catClient.SuckingCatAsync(new Empty(), headers); Console.WriteLine("调用撸猫服务:" + catReply.Message); Console.ReadKey(); }
static async Task Main(string[] args) { var channel = GrpcChannel.ForAddress("https://localhost:5001"); //var client = new Greeter.GreeterClient(channel); //var reply = await client.SayHelloAsync(new HelloRequest { Name = "Michael" }); //Console.WriteLine("Greeter 服务返回数据:" + reply.Message); var catClient = new LuCat.LuCatClient(channel); //var catReply = await catClient.SuckingCatAsync(new Google.Protobuf.WellKnownTypes.Empty()); //Console.WriteLine("调用撸猫服务:" + catReply.Message); var catCount = await catClient.CountAsync(new Google.Protobuf.WellKnownTypes.Empty()); Console.WriteLine($"一共{catCount.Count}只猫。"); var rand = new Random(DateTime.Now.Millisecond); var bathCat = catClient.BathTheCat(); // 定义接收吸猫响应逻辑 var bathCatRespTask = Task.Run(async() => { await foreach (var resp in bathCat.ResponseStream.ReadAllAsync()) { Console.WriteLine(resp.Message); } }); // 随机给10个猫洗澡 for (int i = 0; i < 10; i++) { await bathCat.RequestStream.WriteAsync(new BathTheCatReq { Id = rand.Next(0, catCount.Count) }); } // 发送完毕 await bathCat.RequestStream.CompleteAsync(); Console.WriteLine("客户端已发送完10个需要洗澡的猫id"); Console.WriteLine("接收洗澡结果!"); // 开始接收响应 await bathCatRespTask; Console.WriteLine("洗澡完毕"); }
static async Task Main(string[] args) { //AppContext.SetSwitch( // "System.Net.Http.SocketsHttpHandler.Http2UnencryptedSupport", true); // var httpClientHandler = new HttpClientHandler(); // // Return `true` to allow certificates that are untrusted/invalid // httpClientHandler.ServerCertificateCustomValidationCallback = //HttpClientHandler.DangerousAcceptAnyServerCertificateValidator; // var httpClient = new HttpClient(httpClientHandler); //var channel = GrpcChannel.ForAddress("https://game.raikay.com/"); var channel = GrpcChannel.ForAddress("https://game.raikay.com/");//, new GrpcChannelOptions { HttpClient = httpClient } //var channel = GrpcChannel.ForAddress("http://us-or-cera-1.natfrp.cloud:33000/", new GrpcChannelOptions { HttpClient = httpClient });// // var channel = GrpcChannel.ForAddress("http://game.raikay.com:33000/"); //LuCat.LuCatClient() 添加LuCat.proto文件后自动生成,和服务端LuCat.proto文件一致 var catClient = new LuCat.LuCatClient(channel); var catReply = await catClient.SuckingCatAsync(new ParamRequest { Id = 0 }); Console.WriteLine("" + catReply.Message); Console.ReadKey(); }