我在 .NET Core 服务器上使用 protobuf-net.Grpc 并尝试从 .NET Framework (4.7.2.) gRPC 客户端进行调用。完整的示例在这里: https: //github.com/angelagyang/GRPCProtobufExample
这是我的客户的片段:
var channelCreds = new SslCredentials(GetRootCertificates());
var channel = new Channel("localhost", 5001, channelCreds);
var greeter = channel.CreateGrpcService<IGreeterService>();
Run Code Online (Sandbox Code Playgroud)
StatusCode="Unknown", Detail="Stream removed"...使用此配置,我在调用服务器时收到错误。如果我在服务器上设置,我就可以连接到服务器ClientCertificateMode = ClientCertificateMode.NoCertificate。但是,我希望服务器需要客户端证书并通过指纹验证证书。
例如,在 .NET Core 中,我可以使用 Grpc.Net.Client 来配置我的通道,如下所示:
var handler = new HttpClientHandler();
handler.ClientCertificates.Add(certificate);
var channel2 = GrpcChannel.ForAddress("https://localhost:5001", new GrpcChannelOptions
{
HttpHandler = handler
});
Run Code Online (Sandbox Code Playgroud)
有没有办法像这样在 .NET Framework 中配置带有证书的客户端?我对 gRPC/.NET 还很陌生,非常感谢任何建议!
我有一个在 .Net Core 中实现的 gRPC 服务器,我想与在 .Net Framework 中运行的控制台应用程序联系。
这是该问题的工作存储库:
https://github.com/q-bertsuit/grpc-framework-core-issue
以下 .Net Core 客户端工作正常:
class Program
{
static async Task Main(string[] args)
{
var input = new MyModel();
var channel = GrpcChannel.ForAddress("https://localhost:5001");
var client = new Test.TestClient(channel);
var reply = await client.SetTestAsync(input);
Console.ReadLine();
}
}
Run Code Online (Sandbox Code Playgroud)
以下 .Net Framework 客户端引发异常:
class Program
{
static void Main(string[] args)
{
Channel channel = new Channel("https://localhost:5001", ChannelCredentials.Insecure);
var client = new Test.TestClient(channel);
MyModel request = new MyModel();
var reply = client.SetTest(request);
channel.ShutdownAsync().Wait();
Console.ReadLine(); …Run Code Online (Sandbox Code Playgroud) 无法连接到此链接中提到的迎宾 grpc 服务 - https://docs.microsoft.com/en-us/aspnet/core/tutorials/grpc/grpc-start?view=aspnetcore-3.0 从迎宾客户端是使用 grpc.core 库(Grpc.Core.2.24.0和Grpc.Core.Api.2.24.0)从 .net 框架应用程序编写。
下面是我的客户端代码。它适用于非 SSL,但不适用于 SSL
具有非 SSL 的客户端代码(这有效)
var channel = new Channel("localhost:5000", ChannelCredentials.Insecure);
var client = new Greeter.GreeterClient(channel);
var reply = await client.SayHelloAsync(new HelloRequest { Name = "GreeterClient" });
channel.ShutdownAsync().Wait();
Run Code Online (Sandbox Code Playgroud)
带有 SSL 的客户端代码(无法连接)
SslCredentials secureChannel = new SslCredentials();
var channel = new Channel("localhost", 5001, secureChannel);
var client = new Greeter.GreeterClient(channel);
var reply = await client.SayHelloAsync(new HelloRequest { Name = "GreeterClient" });
channel.ShutdownAsync().Wait();
Run Code Online (Sandbox Code Playgroud)
我使用 SSL 遇到的错误是:
Grpc.Core.RpcException: 'Status(StatusCode=Unavailable, …
我在 .NET Core 中创建了一个 gRPC 服务,需要从在 .NET 4.7.2 上运行的旧版 WPF 应用程序使用它。现有的 WPF 应用程序非常庞大,无法立即转换为 .NET Core,仅仅使用 gRPC 付出的努力是不值得的。我的问题是,有没有办法使用 .NET 4.7.2 WPF 中的 gRPC 服务?