gpt4 book ai didi

c# - 在 Dotnet Framework 4.8 客户端中使用 Core gRPC 服务器?

转载 作者:行者123 更新时间:2023-12-03 16:21:35 25 4
gpt4 key购买 nike

我创建了一个 DotNet Core 3.1 gRPC 服务器。

是否可以在 DotNet Frametwork 4.8 客户端中使用此服务器?

我引用了这些包:

  • Google.Protobuf
  • Grpc.Core
  • Grpc.Core.Api

  • 我的测试代码如下所示:
    using Grpc.Core;
    using System;
    using System.Windows.Forms;

    namespace DotNetgRpcTest.ClientWinformC
    {
    public partial class Form1 : Form
    {
    public Form1()
    {
    InitializeComponent();
    }

    private void Form1_Load(object sender, EventArgs e)
    {
    Channel channel = new Channel("127.0.0.1:50051", ChannelCredentials.Insecure);

    var client = new Greeter.GreeterClient(channel);
    String user = "John";

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

    我已经从服务器复制了greet.proto...

    enter image description here

    但是在上面的代码中找不到Greeter。

    有可能做到吗?

    更新.......

    我设法使用这些 nuget 将 Protos 放入 .Net Standard 2.0 库中:
  • Grpc
  • Grpc.Core
  • Grpc.Tools

  • 下一个问题...

    当我运行应用程序时,我的 .Net Frmawork 4.8 应用程序给了我这个错误:
    Grpc.Core.RpcException: 'Status(StatusCode=Unavailable, Detail="failed to connect to all addresses")'

    从谷歌我了解到服务器中的这段代码会修复它......
    webBuilder.ConfigureKestrel(options =>
    {
    // This endpoint will use HTTP/2 and HTTPS on port 5001.
    options.Listen(IPAddress.Any, 5001, listenOptions =>
    {
    listenOptions.Protocols = HttpProtocols.Http2;
    });
    });

    好吧 - 现在我的 .Net Framework 4.8 应用程序可以工作了......但现在我的 .Net Core 客户端应用程序给了我这个错误:
    Grpc.Core.RpcException: 'Status(StatusCode=Internal, Detail="Error starting gRPC call: The SSL connection could not be established, see inner exception.")'

    最佳答案

    是的,可以使用 .NET Framework 4.8 编写客户端,使用 .NET Core 3.1 编写服务器。也可以使用不同的编程语言编写客户端和服务器,因此您的用例没有理由不可行。但是,无法从 .NET Framework 程序集引用 .NET Core 程序集。

    由于 gRPC 不需要从客户端程序集到服务器程序集的引用,因此您的用例非常好。

    在代码中找不到 Greeter 类的原因可能是以下之一:

  • 您缺少一个 NuGet 包,它可以从 proto 文件中自动生成 C# 代码。确保在项目中安装了 Grpc、Grpc.Tools 和 Google.Protobuf NuGet 包。
  • 您忘记在项目文件中添加对 proto 文件的引用。
  •   <ItemGroup>
    <Protobuf Include="<directory_path>/greet.proto" />
    </ItemGroup>

    此外,我建议您拥有一个单独的 .NET Standard 项目,您可以在其中保留客户端和服务器通用的 .proto 文件。这样你就不需要复制 .proto 文件并确保它们的内容是同步的。

    顺便说一句,在您的项目中包含所有 .proto 文件而不明确指定它们的名称的一个技巧是使用正则表达式:
      <ItemGroup>
    <Protobuf Include="**/*.proto" />
    </ItemGroup>

    关于c# - 在 Dotnet Framework 4.8 客户端中使用 Core gRPC 服务器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61406980/

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