Ron*_*man 2 .net c# wpf grpc asp.net-core
我在 .NET Core 中创建了一个 gRPC 服务,需要从在 .NET 4.7.2 上运行的旧版 WPF 应用程序使用它。现有的 WPF 应用程序非常庞大,无法立即转换为 .NET Core,仅仅使用 gRPC 付出的努力是不值得的。我的问题是,有没有办法使用 .NET 4.7.2 WPF 中的 gRPC 服务?
我终于为这个问题找到了一个可行的解决方案:
主要问题是找到一种解决方案来接受来自远程客户端的自签名 SSL 服务器证书,这对于我们的场景是必需的。
服务器使用此处提供的解决方案获取生成的证书(解决方案也适用于任何有效证书):https : //gist.github.com/mivano/356d4f0354d997370e3c2e62809cdeef
这里要提的重要一点:服务器的 DNS 或 IP 由客户端验证,因此它必须是证书的一部分。
gRPC 服务器是这样配置的(也可以通过 .appsettings.json 实现):
webBuilder.ConfigureKestrel(
options =>
{
options.Listen(
IPAddress.Any,
<your port>,
listenOptions =>
{
listenOptions.UseHttps("<your.pfx path>", "<your passphrase>");
listenOptions.Protocols = HttpProtocols.Http2;
});
});
Run Code Online (Sandbox Code Playgroud)
gRPC 客户端:
openssl pkcs12 -in "<pfx path>.pfx" -out "<pem path>.pem" -clcerts
如何在 .NET Framework 中创建 gRPC 客户端?
渠道:
var channelCredentials = new SslCredentials(
File.ReadAllText("<path to pem>.pem"), null, verifyPeerCallback => true);
var serviceChannel = new Channel("<DnsName from cert", <port>, channelCredentials);
var serviceProxy = new GrpcService.GrpcServiceClient(serviceChannel );
Run Code Online (Sandbox Code Playgroud)
客户端还可以实现为使用带有适当 HttpClientHandler 和附加 ServerCerifacteCustomValidationCallback 的常规 HttpClient.Get 从服务器动态下载证书。在创建服务通道之前,必须在内存中创建 pem:https : //github.com/grpc/grpc/issues/8978#issuecomment-283469676
归档时间: |
|
查看次数: |
2657 次 |
最近记录: |