我正在尝试使用.aa绑定的official grpc library(版本1.20)使基本的gRPC C#客户端和服务器正常工作。但是每次我的客户呼叫都无法通过此错误到达服务器时:
Grpc.Core.RpcException: Status(StatusCode=Unknown, Detail="Stream removed")
故障是立即的(没有等待或超时)并且一致。
这包括所有正式的gRPC examples,它们都可以立即构建并运行,但是无法通过该错误调用服务器。例如:
// Server
Server server = new Server
{
Services = { Greeter.BindService(new GreeterImpl()) },
Ports = { new ServerPort("localhost", 50051, ServerCredentials.Insecure) }
};
server.Start();
Console.ReadKey();
server.ShutdownAsync().Wait();
// Client
Channel channel = new Channel("127.0.0.1:50051", ChannelCredentials.Insecure);
var client = new Greeter.GreeterClient(channel);
var reply = client.SayHello(new HelloRequest { Name = "you" });
我还尝试使用BloomRPC client调用服务器,并显示相同的错误消息。
没有调用服务器服务实现,并且服务器日志(GRPC_TRACE=all
和GRPC_VERBOSITY=debug
)中未写入任何内容。 Here是具有相同设置的完整客户端日志。摘录:
D0418 14:53:48.801298 0 ...: set_final_status CLI
D0418 14:53:48.801545 0 ...: {"created":"@1555592028.801000000","description":"Error received from peer","file":"...","file_line":1036,"grpc_message":"Stream removed","grpc_status":2}
I0418 14:53:48.802018 0 ...: ipv4:10.240.240.1:8080: Complete BDP ping err={"created":"@1555592028.790000000","description":"OS Error","file":"T:\src\github\grpc\workspace_csharp_ext_windows_x64\src\core\lib\iomgr\tcp_windows.cc","file_line":344,"os_error":"An established connection was aborted by the software in your host machine.\r\n","syscall":"WSASend","wsa_error":10053}
服务器的端口在资源管理器中显示为打开,我能够使用telnet调用服务器,并且它会响应一些字节的非文本数据(并在我发送任何输入后立即断开连接)。
我尝试了客户端和服务器的主机地址的各种组合(“本地主机”,“ 127.0.0.1”,“ 0.0.0.0”,我的计算机的名称或本地网络中的IP),所有这些都在同一端。
这是在最新的Win10,VS 2017,.Net Core 2.1(也有2.0)上发生的。 Windows防火墙已禁用。我经常在此计算机上使用其他网络技术(例如WCF)进行开发,从未遇到过任何此类问题。
有趣的是,相同的精确代码可以立即在我的家用计算机上正常工作,因此必须与系统有关,但是我无法确定是什么。
编辑:我体验了这些C#客户端和服务器与Java中类似客户端服务器之间的通信(来自grpc-java示例)。
我的观察:
Java客户端可以调用C#服务器。
C#客户端无法调用Java服务器
Java客户端可以调用Java服务器
C#客户端无法调用C#服务器。
这得出一个简单的结论:问题出在C#客户端上,尽管我没有解释为什么它可以在其他计算机上工作(我也在同事的计算机上对其进行了测试,并且可以在该计算机上运行)。
参考方案
与MatějZábský相似,我在“流删除”错误中苦苦挣扎,但未能使BloomRPC调用我的代码。我的情况略有不同-我的服务器部分是使用.NET Core 3中的新Grpc.AspNetCore NuGet包编写的,而客户端使用的是Grpc.Core Nuget包(与较旧的.NET Framework兼容)。为了解决这个问题,在gRPC的服务器端,我做了此更改(希望对您有所帮助):
从:
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
至:
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.ConfigureKestrel(options =>
{
// This endpoint will use HTTP/2 and HTTPS on port 5001.
options.Listen(IPAddress.Any, 5001, listenOptions =>
{
listenOptions.Protocols = HttpProtocols.Http2;
});
});
webBuilder.UseStartup<Startup>();
});
当回复有时是一个对象有时是一个数组时,如何在使用改造时解析JSON回复? - java我正在使用Retrofit来获取JSON答复。这是我实施的一部分-@GET("/api/report/list") Observable<Bills> listBill(@Query("employee_id") String employeeID); 而条例草案类是-public static class…
改造正在返回一个空的响应主体 - java我正在尝试使用Retrofit和Gson解析一些JSON。但是,我得到的响应机构是空的。当我尝试从对象中打印信息时,出现NullPointerException。我确保URL正确,并且我也确保POJO也正确。我正在使用jsonschema2pojo来帮助创建POJO类。这是我要解析的JSON{ "?xml": { "@versi…
在xpath中选择多个条件 - php我正在尝试使用来自高尔夫比赛的xml提要,以显示每个高尔夫球手在高尔夫球场上的位置。目前,我想展示符合两个条件的所有高尔夫球手(排在前25名,以及所有加拿大高尔夫球手)。这是xml提要的示例。<GolfDataFeed Type="Leaderboards" Timestamp="3/21/2012 9:18:09 PM&…
jQuery不起作用 - php我正在使用带有ajax的jquery。有时,给出错误$未定义。这是我的代码:<script language="javascript" type="text/javascript"> var base_path="<? echo $this->baseUrl().'/…
每个文件合并后添加换行 - python我有很多类似以下内容的JSON文件:例如。1.json{"name": "one", "description": "testDescription...", "comment": ""} test.json{"name"…