我创建了一个DotNet Core 3.1 gRPC服务器。
是否可以在DotNet Frametwork 4.8客户端中使用此服务器?
我引用了这些包:
我的测试代码如下所示:
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:
下一道题...
当我运行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.")'
是的,可以在.NET Framework 4.8中编写客户端,在.NET Core 3.1中编写服务器。也可以使用不同的编程语言编写客户端和服务器,因此您的用例没有理由不可能。但是,无法从.NET框架程序集引用.NET核心程序集。
由于gRPC不需要从客户端程序集到服务器程序集的引用,因此您的用例非常好。
您在代码中找不到Greeter类的原因可能是以下原因之一:
<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: 客户端应用程序的代码如下所示: