private static async void Grpc()
        {
            //1、开始调用连接
            using var channel = GrpcChannel.ForAddress("https://localhost:5001");

            // 2、创建客户端
            var client = new GrpcService.GrpcServiceClient(channel);

            #region  务器流式处理 (服务器可以响应多个函数)
            var responsesStream = client.StudentServer(
                new RmRequest {
                Name = "小强"
            }
                );

            var readStream = responsesStream.ResponseStream;

            // 1、获取一次输出(for 循环每一次写出)
            while (await readStream.MoveNext())
            {
                RmResponse rmResponse = readStream.Current;

                Console.WriteLine($"客户端收到请求:{rmResponse.Message}");
            }

            Console.WriteLine("Press any key to exit...");

            #endregion
        }
Exemple #2
0
 /// <summary>
 /// Get gRPC client object used by data portal.
 /// </summary>
 /// <returns></returns>
 protected virtual GrpcService.GrpcServiceClient GetGrpcClient()
 {
     if (_grpcClient == null)
     {
         _grpcClient = new GrpcService.GrpcServiceClient(GetChannel());
     }
     return(_grpcClient);
 }
Exemple #3
0
 /// <summary>
 /// Get gRPC client object used by data portal.
 /// </summary>
 /// <returns></returns>
 protected virtual GrpcService.GrpcServiceClient GetGrpcClient()
 {
     if (_grpcClient == null)
     {
         _grpcClient = GrpcClient.Create <GrpcService.GrpcServiceClient>(GetHttpClient());
     }
     return(_grpcClient);
 }
Exemple #4
0
        static void Main(string[] args)
        {
            Channel channel = new Channel("127.0.0.1:9007", ChannelCredentials.Insecure);

            var client = new GrpcService.GrpcServiceClient(channel);
            var reply  = client.SayHello(new HelloRequest {
                Name = "April"
            });

            Console.WriteLine("来自" + reply.Message);

            channel.ShutdownAsync().Wait();
            Console.WriteLine("任意键退出...");
            Console.ReadKey();
        }
        public async Task FileUpLoadAsync([Option(Description = "Path for uploading the file")] string filePath)
        {
            Channel channel = new Channel("127.0.0.1:30051", ChannelCredentials.Insecure);
            var     cts     = new CancellationTokenSource();

            try
            {
                var fileName = Path.GetFileName(filePath);

                var client = new GrpcService.GrpcServiceClient(channel);

                //using (var stream = client.FileUpLoad(cancellationToken: cts.Token))
                //{
                //    await stream.RequestStream.WriteAsync(new FileUploadRequest
                //    {
                //        FileName = fileName
                //    });

                //    using FileStream inputStream = new FileStream(filePath, FileMode.Open, FileAccess.Read);
                //    int chunkSize = 512 * 1024; //500 KB
                //    byte[] bytes = new byte[chunkSize];
                //    int numberOfChunks = 1;

                //    int size;
                //    while ((size = inputStream.Read(bytes)) > 0)
                //    {
                //        var chunk = ByteString.CopyFrom(bytes, 0, size);

                //        await stream.RequestStream.WriteAsync(new FileUploadRequest
                //        {
                //            Chunk = chunk
                //        });

                //        await Task.Delay(millisecondsDelay: 1);
                //        numberOfChunks++;
                //    }

                //    Console.WriteLine($"The number of chunks sent: {numberOfChunks}");
                //    await stream.RequestStream.CompleteAsync();
                //}

                using AsyncServerStreamingCall <DataChunk> streaming = client.FileDownload(new FileDownloadRequest
                {
                    FileName = fileName
                }, cancellationToken: cts.Token);
                try
                {
                    using var memoryStream = new MemoryStream();

                    while (await streaming.ResponseStream.MoveNext(cancellationToken: cts.Token))
                    {
                        var dataChunk = streaming.ResponseStream.Current;
                        var chunk     = dataChunk.ToByteArray();
                        await memoryStream.WriteAsync(chunk);
                    }
                    memoryStream.Seek(0, SeekOrigin.Begin);

                    using var fs = new FileStream(fileName, FileMode.Create, FileAccess.Write);
                    await memoryStream.CopyToAsync(fs);
                }
                catch (RpcException ex) when(ex.StatusCode == StatusCode.Cancelled)
                {
                    Console.WriteLine("Stream cancelled.");
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
                cts.Cancel();
            }

            await channel.ShutdownAsync();
        }
 /// <summary>
 /// 构造方法
 /// </summary>
 /// <param name="client"></param>
 internal GrpcClient(GrpcService.GrpcServiceClient client, IGrpcMultiMessageHandler multiMessageHandler = null)
 {
     this.client = client;
     this.multiMessageHandler = multiMessageHandler;
 }
 public void Dispose()
 {
     this.client = null;
 }
Exemple #8
0
 /// <summary>
 /// Set gRPC client object for use by data portal.
 /// </summary>
 /// <param name="client">gRPC client instance.</param>
 public static void SetGrpcClient(GrpcService.GrpcServiceClient client)
 {
     _grpcClient = client;
 }