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 }
/// <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); }
/// <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); }
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; }
/// <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; }