Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        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);
        }
Esempio n. 3
0
        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);
        }
Esempio n. 4
0
        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);
        }
Esempio n. 5
0
        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);
        }
Esempio n. 6
0
        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();
        }