Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/336.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# 无法连接到Linux计算机上的GRPC服务_C#_Linux_.net Core_Grpc_Opensuse - Fatal编程技术网

C# 无法连接到Linux计算机上的GRPC服务

C# 无法连接到Linux计算机上的GRPC服务,c#,linux,.net-core,grpc,opensuse,C#,Linux,.net Core,Grpc,Opensuse,我已经编写了一个充当服务器的GRPC.NET Core Worker服务和一个充当GRPC客户端的.NET Core控制台应用程序。两者都遵循使用helloworld.proto文件的教程,但我扩展了它们,以便服务器可以在一台计算机上,客户端可以在另一台计算机上 服务器如下所示: class GreeterImpl : Greeter.GreeterBase { // Server side handler of the SayHello RPC public override

我已经编写了一个充当服务器的GRPC.NET Core Worker服务和一个充当GRPC客户端的.NET Core控制台应用程序。两者都遵循使用helloworld.proto文件的教程,但我扩展了它们,以便服务器可以在一台计算机上,客户端可以在另一台计算机上

服务器如下所示:

class GreeterImpl : Greeter.GreeterBase
{
    // Server side handler of the SayHello RPC
    public override Task<HelloReply> SayHello(HelloRequest request, ServerCallContext context)
    {
        return Task.FromResult(new HelloReply { Message = "Hello " + request.Name });
    }
}

public class Worker : BackgroundService
{
    private readonly ILogger<Worker> _logger;

    private const int PORT = 5221;
    private Server m_Server;

    public Worker(ILogger<Worker> logger)
    {
        _logger = logger;
    }

    public override Task StartAsync(CancellationToken cancellationToken)
    {
        _logger.LogInformation("Starting grpc...");
        _logger.LogInformation("Local machine name: {computer}, Port: {port}", Environment.MachineName, PORT);
        m_Server = new Server
        {
            Services = { Greeter.BindService(new GreeterImpl()) },
            Ports = { new ServerPort(Environment.MachineName, PORT, ServerCredentials.Insecure) }
        };
        m_Server.Start();

        return base.StartAsync(cancellationToken);
    }

    public override Task StopAsync(CancellationToken cancellationToken)
    {
        _logger.LogInformation("Shutting down...");
        m_Server.ShutdownAsync().Wait();

        return base.StopAsync(cancellationToken);
    }

    protected override async Task ExecuteAsync(CancellationToken stoppingToken)
    {
        while (!stoppingToken.IsCancellationRequested)
        {
            //_logger.LogInformation("Worker running at: {time}", DateTimeOffset.Now);
            await Task.Delay(1000, stoppingToken);
        }
    }
}
class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Enter the server IP address or name:");
            string server = Console.ReadLine();
            Console.WriteLine($"The server entered was: {server}");

            Channel channel = new Channel(string.Format("{0}:5221", server), ChannelCredentials.Insecure);

            var client = new Greeter.GreeterClient(channel);
            string user = "you";

            var reply = client.SayHello(new HelloRequest { Name = user });
            Console.WriteLine("Greeting: " + reply.Message);

            channel.ShutdownAsync().Wait();
            Console.WriteLine("Press any key to exit...");
            Console.ReadKey();
        }
    }
在这种情况下,他们使用端口5221进行连接

我已成功运行该程序:

  • Windows计算机上的服务器,不同Windows计算机上的客户端
  • Windows计算机上的服务器,opensuse linux计算机上的客户端
  • 同一台opensuse linux计算机上的服务器和客户端
当服务器在opensuse linux计算机上运行,而客户端在Windows计算机上运行时,我无法进行配置。我得到一个错误: 未处理的异常。Grpc.Core.RpcException:Status(StatusCode=Unavailable,Detail=“无法连接到所有地址”)。这在运行客户端的Windows计算机上发生。在opensuse linux上运行的服务器不受影响


linux和Windows计算机可以通过名称和ip地址相互ping。端口5221在linux计算机上打开。我不是linux大师,我认为这是运行服务器时该计算机上的一些网络问题。有人有什么想法吗?

您是否确保端口5221对linux机器上的连接开放?尝试运行“测试网络连接{host}-端口5221”进行测试。如果没有,您需要配置防火墙。@TylerE您最终成功地在linux作为服务器,windows作为客户端的情况下运行了您的程序吗?@tube builder没有,我永远也找不到它,于是放弃了它。@TylerE以防您仍然需要它,多亏了stack exchange的unix/linux部分,我现在已经在Windows上成功地运行了我的客户端,同时在linux上运行了服务,请检查我的问题。也许也会给你一些想法。你是否确保端口5221对linux机器上的连接开放?尝试运行“测试网络连接{host}-端口5221”进行测试。如果没有,您需要配置防火墙。@TylerE您最终成功地在linux作为服务器,windows作为客户端的情况下运行了您的程序吗?@tube builder没有,我永远也找不到它,于是放弃了它。@TylerE以防您仍然需要它,多亏了stack exchange的unix/linux部分,我现在已经在Windows上成功地运行了我的客户端,同时在linux上运行了服务,请检查我的问题。也许也会给你一些想法。