public async Task SayHelloServerStreamingTest() { var cts = new CancellationTokenSource(); var client = new TestSvc.TestSvcClient(base.Channel); bool isCancelled = false; var lst = new List <string>(); using (var serverStreaming = client.SayHelloServerStreaming(new HelloRequest() { Name = "Joe" }, cancellationToken: cts.Token)) { await Task.Delay(2000); try { while (await serverStreaming.ResponseStream.MoveNext(CancellationToken.None)) { lst.Add(serverStreaming.ResponseStream.Current.Message); cts.Cancel(); } } catch (Exception e) { isCancelled = true; } } Assert.NotEmpty(lst); Assert.True(isCancelled == true); }
public async Task SayHelloClientStreamingTest() { var client = new TestSvc.TestSvcClient(base.Channel); var clientStreaming = client.SayHelloClientStreaming(); await clientStreaming.RequestStream.WriteAsync(new HelloRequest() { Name = "A" }); await clientStreaming.RequestStream.WriteAsync(new HelloRequest() { Name = "B" }); await clientStreaming.RequestStream.WriteAsync(new HelloRequest() { Name = "C" }); await clientStreaming.RequestStream.CompleteAsync(); var clientStreamingResponseAsync = await clientStreaming.ResponseAsync; // Assert Assert.Equal("A,B,C", clientStreamingResponseAsync.Message); }
public async Task SayHelloBidirectionalStreamingTest() { var cts = new CancellationTokenSource(); var client = new TestSvc.TestSvcClient(base.Channel); bool isCancelled = false; string message = string.Empty; var lst = new List <string>(); var names = new[] { "A", "B", "C" }; using (var bidirectionalStreaming = client.SayHelloBidirectionalStreaming(cancellationToken: cts.Token)) { foreach (var name in names) { await bidirectionalStreaming.RequestStream.WriteAsync(new HelloRequest() { Name = name }); Assert.True(await bidirectionalStreaming.ResponseStream.MoveNext(CancellationToken.None)); lst.Add(bidirectionalStreaming.ResponseStream.Current.Message); } await bidirectionalStreaming.RequestStream.CompleteAsync(); } Assert.NotEmpty(lst); }
public async Task SayHelloUnaryTest() { var client = new TestSvc.TestSvcClient(base.Channel); var response = await client.SayHelloUnaryAsync(new HelloRequest() { Name = "Joe" }); // Assert Assert.Equal("Hello Joe", response.Message); }
public async Task SayHelloUnaryTest_Withtimeout() { var client = new TestSvc.TestSvcClient(CreateChannel(new GrpcChannelOptions() { HttpClient = _httpClient, DisposeHttpClient = true, })); _httpClient.Timeout = TimeSpan.FromMilliseconds(5000); var response = await client.SayHelloUnaryAsync(new HelloRequest() { Name = "Joe" }); // Assert Assert.Equal("Hello Joe", response.Message); }
static void Main(string[] args) { //脚本生成在统一脚本处理引擎 //服务端流式可以参考:https://www.cnblogs.com/lonelyxmas/p/10297004.html Console.WriteLine("I'm Client."); Thread.Sleep(1000); var channel = new Channel("127.0.0.1", port, ChannelCredentials.Insecure); var client = new TestSvc.TestSvcClient(channel); Console.WriteLine("客户端服务已开启,输入exit退出"); var p = 150000;//150000 #region Register1 ////当p = 150000时,Max为15142 //for (var i = 0; i < p; i++) //{ // var call = client.Register1Async(new Service.Models.RegisterRq() // { // Age = 17, // AnnualIncome = 343434D, // Email = "*****@*****.**", // Gender = true, // Name = "Data", // Phone = "3434334", // }); //} ////当p = 150000时,Max为15642 //for (var i = 0; i < p; i++) //{ // Task.Run(() => // { // var call = client.Register1Async(new Service.Models.RegisterRq() // { // Age = 17, // AnnualIncome = 343434D, // Email = "*****@*****.**", // Gender = true, // Name = "Data", // Phone = "3434334", // }); // }); //} ////当p = 150000时,Max为15842 //for (var i = 0; i < p; i++) //{ // ThreadPool.QueueUserWorkItem((s) => // { // var call = client.Register1Async(new Service.Models.RegisterRq() // { // Age = 17, // AnnualIncome = 343434D, // Email = "*****@*****.**", // Gender = true, // Name = "Data", // Phone = "3434334", // }); // }); //} ////当p = 150000时,Max为15642 //Parallel.For(0, p, (i, s) => //{ // var call = client.Register1Async(new Service.Models.RegisterRq() // { // Age = 17, // AnnualIncome = 343434D, // Email = "*****@*****.**", // Gender = true, // Name = "Data", // Phone = "3434334", // }); //}); #endregion #region Register2 //var ck = new CancellationToken(); ////当p = 150000时,Max为9500 //Parallel.For(0, p, async (i, s) => //{ // using (var call = client.Register2(new Service.Models.RegisterRq() // { // Age = 17, // AnnualIncome = 343434D, // Email = "*****@*****.**", // Gender = true, // Name = "Data", // Phone = "3434334", // }, cancellationToken: ck)) // { // using (var resStream = call.ResponseStream) // { // while (await resStream.MoveNext(ck)) // { // Console.WriteLine(resStream.Current.ErrMsg); // //服务端有两次流写入,因此客户端有两次流读取 // //因此输出:sdsd、sdsd2 // } // } // } //}); #endregion #region Register3 //var ck = new CancellationToken(); ////当p = 150000时,Max为8500 //Parallel.For(0, p, async (i, s) => //{ // using (var call = client.Register3()) // { // var ret = new Service.Models.RegisterRq() // { // Age = 17, // AnnualIncome = 343434D, // Email = "*****@*****.**", // Gender = true, // Name = "Data", // Phone = "3434334", // }; // //客户端两次流写入 // await call.RequestStream.WriteAsync(ret); // ret.Name = "Data2"; // await call.RequestStream.WriteAsync(ret); // await call.RequestStream.CompleteAsync(); // //var r1 = await call.ResponseAsync; // //Console.WriteLine($"{r1.ErrMsg}{DateTime.Now.ToString("fff")}"); // } //}); #endregion #region Register4 //var ck = new CancellationToken(); ////当p = 150000时,Max为8500 //Parallel.For(0, p, async (i, s) => //{ // using (var call = client.Register4()) // { // var ret = new Service.Models.RegisterRq() // { // Age = 17, // AnnualIncome = 343434D, // Email = "*****@*****.**", // Gender = true, // Name = "Data", // Phone = "3434334", // }; // //客户端两次流写入 // await call.RequestStream.WriteAsync(ret); // ret.Name = "Data2"; // await call.RequestStream.WriteAsync(ret); // await call.RequestStream.CompleteAsync(); // using (var resStream = call.ResponseStream) // { // while (await resStream.MoveNext(ck)) // { // Console.WriteLine(resStream.Current.ErrMsg); // //服务端有两次流写入,因此客户端有两次流读取 // //因此输出:sdsd、sdsd2 // } // } // } //}); #endregion Console.WriteLine("回车结束"); Console.ReadLine(); }