当前位置: 首页 > 知识库问答 >
问题:

在Dotnet Framework 4.8客户端中使用核心gRPC服务器?

常海
2023-03-14

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

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

我引用了这些包:

  • 谷歌。Protobuf
  • Grpc。核心
  • 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);           
        }
    }
}

我复制了问候语。来自服务器的proto。。。

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

这样做有可能吗?

更新。。。。。。。

我设法将Protos放在一个.Net Standard 2.0库中,其中包含以下nugets:

  • 咕噜咕噜
  • Grpc.Core
  • Grpc.Tools

下一道题...

当我运行html" target="_blank">应用程序时,我的.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框架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.")'

共有1个答案

公西浩
2023-03-14

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

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

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

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

此外,我建议你有一个单独的。NET标准项目,您将在其中保存。客户机和服务器通用的原型文件。这样你就不需要到处复制了。原型文件,并确保它们的内容是同步的。

顺便说一句,在项目中包含所有. proto文件而不显式指定它们的名称的一个技巧是使用正则表达式:

  <ItemGroup>
    <Protobuf Include="**/*.proto" />
  </ItemGroup>
 类似资料:
  • 我对gRpc很陌生,已经开始探索它们的基础知识(在C语言中)。我想获得有关如何发送心跳以检查客户端/服务器是否仍处于连接状态以及在断开连接时采取恢复措施的指导。任何示例或参考任何文档/文章都将有助于我开始学习。谢谢

  • 将grpc定义的服务视为: 并利用客户端连接到此服务类似于: 如果我们要在一个单独的线程中生成调用,那么处理终止一个永远运行、我们不想再使用的grpc连接的正确方法是什么?是否有任何连接或流控制方法可以调用?

  • 遵循以下文档:https://docs.microsoft.com/fr-fr/aspnet/core/grpc/authn-and-authz?view=aspnetcore-3.0#承载令牌身份验证,我尝试配置我的GRPC客户端以自动注入JWT令牌。 但它被Grpc.Core中的一个例外“提供的通道凭据不允许组合”窒息 这是什么意思?我应该如何提供HTTP授权标头?

  • 我用的是protobuf-net。Grpc并试图从. NET Framework (4.7.2)进行调用。)gRPC客户端。完整的例子在这里:https://github.com/angelagyang/GRPCProtobufExample 下面是我的客户的一个片段: 使用此配置,我在调用服务器时得到错误。如果我在服务器上设置,我就能够连接到服务器。但是,我希望服务器需要客户端证书并通过指纹验证

  • 今天遇到一些问题,我需要知道它们之间的具体区别 < code >编译“com . firebase:firebase-client-Android:2 . 4 . 0” 和 不要注意版本 所以请分享你的知识。

  • 下面的代码片段显示了如何在gRPC AspNet核心应用程序中启用gRPC web: 客户端应用程序的代码如下所示: