Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#Grpc服务器端流式RPC。客户端仅接收到第一条消息和第二条消息_C#_.net_Grpc_Responsestream - Fatal编程技术网

C#Grpc服务器端流式RPC。客户端仅接收到第一条消息和第二条消息

C#Grpc服务器端流式RPC。客户端仅接收到第一条消息和第二条消息,c#,.net,grpc,responsestream,C#,.net,Grpc,Responsestream,我正在尝试实现服务器端流式rpc,以便将消息从服务器发送到客户端 rpc CheckSystem(CheckSystemRequest) returns (stream CheckSystemResponse) {} 服务器代码: public override Task CheckSystem(CheckSystemRequest request, IServerStreamWriter<CheckSystemResponse> responseStream, ServerCal

我正在尝试实现服务器端流式rpc,以便将消息从服务器发送到客户端

rpc CheckSystem(CheckSystemRequest) returns (stream CheckSystemResponse) {}
服务器代码:

public override Task CheckSystem(CheckSystemRequest request, IServerStreamWriter<CheckSystemResponse> responseStream, ServerCallContext context) {
  return Task.Run(async () => {
    for(int i = 1; i <= 10; i++) { 
      await responseStream.WriteAsync(new CheckSystemResponse { Type = i.ToString() });
      Console.WriteLine($"{DateTime.Now}: Sent {i}");
      Thread.Sleep(10000);
    }
  });
}
启动后,我看到服务器端每10秒发送一条消息。

但是,客户端仅在服务器发送第二条消息之后才开始处理第一条消息。


这种行为的原因可能是什么?如何解决这个问题?

您解决问题了吗?我们现在在C#client上遇到了同样的问题。此问题仅在使用Windows 7的计算机上重现。我认为,由于Windows7已不再受支持,没有人能解决这个问题。您可以在此处查看,它在Windows 10上复制
public static async Task TestAsync() {
  try {        
    using (var call = client.CheckSystem(new CheckSystemRequest { Code = "1" })) {
      var responseStream = call.ResponseStream;
      while (await responseStream.MoveNext()) {
        var current = responseStream.Current;
        Console.WriteLine($"{DateTime.Now}: Received: Type = {current.Type}");
      }
    }
  }
  catch (Exception ex) {
    Console.WriteLine(ex.Message);
  }
}
13.12.2019 **16:31:31**: Sent 1
13.12.2019 **16:31:41**: Sent 2
13.12.2019 16:31:51: Sent 3
13.12.2019 16:32:01: Sent 4
13.12.2019 16:32:11: Sent 5
13.12.2019 16:32:21: Sent 6
13.12.2019 16:32:31: Sent 7
13.12.2019 16:32:41: Sent 8
13.12.2019 16:32:51: Sent 9
13.12.2019 16:33:01: Sent 10
13.12.2019 **16:31:41**: Received: Type = 1
13.12.2019 **16:31:41**: Received: Type = 2
13.12.2019 16:31:51: Received: Type = 3
13.12.2019 16:32:01: Received: Type = 4
13.12.2019 16:32:11: Received: Type = 5
13.12.2019 16:32:21: Received: Type = 6
13.12.2019 16:32:31: Received: Type = 7
13.12.2019 16:32:41: Received: Type = 8
13.12.2019 16:32:51: Received: Type = 9
13.12.2019 16:33:01: Received: Type = 10