gpt4 book ai didi

c# - gRPC:无法从 Windows 客户端连接到 Linux 服务

转载 作者:行者123 更新时间:2023-12-04 19:31:20 24 4
gpt4 key购买 nike

我正在尝试在我的项目中开始使用 gRPC 服务。
一开始,我在 Visual Studio 中使用了一个测试项目,该项目是在您添加 gRPC 服务项目时自动创建的。这是一些代码。

客户:

class Program
{
static async Task Main(string[] args)
{
HttpClientHandler clientHandler = new HttpClientHandler
{
ServerCertificateCustomValidationCallback = (sender, cert, chain, sslPolicyErrors) => { return true; }
};

HttpClient httpClient = new HttpClient(clientHandler);

using var channel = GrpcChannel.ForAddress("https://localhost:55555",
new GrpcChannelOptions { HttpClient = httpClient });

var client = new Greeter.GreeterClient(channel);
Console.Write("Name: ");
string name = Console.ReadLine();

var reply = await client.SayHelloAsync(new HelloRequest { Name = name });
Console.WriteLine("Response: " + reply.Message);
Console.ReadKey();
}
}

服务:
public class Program
{
public static void Main(string[] args)
{
CreateHostBuilder(args).Build().Run();
}

// Additional configuration is required to successfully run gRPC on macOS.
// For instructions on how to configure Kestrel and gRPC clients on macOS, visit https://go.microsoft.com/fwlink/?linkid=2099682
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)

.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
}

public class GreeterService : Greeter.GreeterBase
{
private readonly ILogger<GreeterService> _logger;
public GreeterService(ILogger<GreeterService> logger)
{
_logger = logger;
}

public override Task<HelloReply> SayHello(HelloRequest request, ServerCallContext context)
{
return Task.FromResult(new HelloReply
{
Message = "Hello " + request.Name
});
}
}

我覆盖了 appsettings.json 中的默认 5001 端口:
{
"Logging": {
"LogLevel": {
"Default": "Debug",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information",
"Grpc": "Debug"
}
},
"AllowedHosts": "*",
"Kestrel": {
"EndPoints": {
"Http": {
"Url": "https://localhost:55555"
}
},
"EndpointDefaults": {
"Protocols": "Http2"
}
} }

当客户端和服务都在 Windows 机器上时,我启动项目没有问题,这是一个屏幕截图:

enter image description here

当它们都在 Linux 机器上时也是如此:

enter image description here

但是我不能让它与运行在 Windows 上的客户端和 Linux 上的服务一起工作。
我对 Linux 了解不多,但在我看来,问题可能在于我无法从我的 Windows 机器访问端口 55555。

我尝试使用 Powershell 对其进行测试,结果如下:

enter image description here

我检查了服务正在运行并且端口已打开,这是我尝试的一些命令以及得到的结果:
[user@localhost ~]$ grep -w 55555 /etc/services
test 55555/tcp # TestService

[user@localhost ~]$ sudo lsof -i -P -n | grep LISTEN
[sudo] password for user:
GrpcServi 10933 user 166u IPv4 1090871 0t0 TCP 127.0.0.1:55555 (LISTEN)
GrpcServi 10933 user 167u IPv6 1090874 0t0 TCP [::1]:55555 (LISTEN)

[user@localhost ~]$ sudo netstat -tulpn | grep LISTEN
tcp 0 0 127.0.0.1:55555 0.0.0.0:* LISTEN 10933/./GrpcService
tcp6 0 0 ::1:55555 :::* LISTEN 10933/./GrpcService

[user@localhost ~]$ sudo netstat -tulpn | grep :55555
tcp 0 0 127.0.0.1:55555 0.0.0.0:* LISTEN 10933/./GrpcService
tcp6 0 0 ::1:55555 :::* LISTEN 10933/./GrpcService

[user@localhost ~]$ sudo ss -tulpn | grep LISTEN
tcp LISTEN 0 128 127.0.0.1:55555 0.0.0.0:* users:
(("GrpcService",pid=10933,fd=166))
tcp LISTEN 0 128 [::1]:55555 [::]:* users:
(("GrpcService",pid=10933,fd=167))

[user@localhost ~]$ sudo ss -tulpn | grep ':55555'
tcp LISTEN 0 128 127.0.0.1:55555 0.0.0.0:* users:
(("GrpcService",pid=10933,fd=166))
tcp LISTEN 0 128 [::1]:55555 [::]:* users:
(("GrpcService",pid=10933,fd=167))

[user@localhost ~]$ sudo lsof -i -P -n | grep LISTEN
GrpcServi 10933 user 166u IPv4 1090871 0t0 TCP 127.0.0.1:55555 (LISTEN)
GrpcServi 10933 user 167u IPv6 1090874 0t0 TCP [::1]:55555 (LISTEN)

[user@localhost ~]$ sudo firewall-cmd --zone=public --list-all
[sudo] password for user:
public (active)
target: default
icmp-block-inversion: no
interfaces: enp2s0
sources:
services: cockpit dhcpv6-client ssh
ports: 3389/tcp 3389/udp 55555/tcp
protocols:
masquerade: yes
forward-ports:
source-ports:
icmp-blocks:
rich rules:

我还尝试在 Windows 和 Linux 上禁用防火墙以检查是否有帮助,但无济于事。

两台机器都在同一个网络中。
CentOS 8 和 Windows 10。

最佳答案

在这里找到我的答案 https://unix.stackexchange.com/questions/578677/unable-to-connect-to-a-linux-port-from-window

必须更改 中的“Url”:“https://localhost:55555”应用设置 .json 文件到“Url”:“https://0.0.0.0:55555

关于c# - gRPC:无法从 Windows 客户端连接到 Linux 服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61096014/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com