如何在.NET Framework中创建gRPC客户端?

时间:2020-03-20 00:10:52

标签: c# .net grpc

我遵循了以下指示:

https://docs.microsoft.com/en-us/aspnet/core/tutorials/grpc/grpc-start?view=aspnetcore-3.1&tabs=visual-studio

在.NET Core中创建gRPC服务和客户端,一切运行良好。

接下来,我需要一个旧的.NET Framework应用程序来访问该服务。我找到了一些可以安装的NuGet软件包,但没有发现任何可以告诉您如何使用它们制作gRPC客户端的软件包。我确定它在某处,但是目前被.NET Core版本的文档淹没。

我试图创建一个.NET Standard项目来弥合差距,但是.Net Core软件包需要.Net Standard 2.1,因此在任何版本的.Net Framework中都没有引用它。

有人可以告诉我如何进行此操作或为我指明正确的方向吗?

编辑: 因此,我找到了.Net Framework与gRPC一起使用的一些代码。 .Net Framework示例默认为不安全连接,而.Net Core示例默认为安全连接。而且,关于如何更改任何一个都没有明确的途径。我尝试生成证书以使客户端连接,但这没用。

所以我的新问题是:有谁知道如何说服.Net Core gRPC服务接受不安全的(http :)连接?

2 个答案:

答案 0 :(得分:4)

是否通过SSL,您需要在ASP.NET Core服务器中打开Http2。因此,在appsettings.json中,执行此操作。

 .domain([0,d3.max(function(d) { return d.value; })])

不安全的.NET Framework客户端+ ASP.NET Core服务器

  • ASP.NET Core服务器
    1. 删除"Kestrel": { "EndpointDefaults": { "Protocols": "Http2" } app.UseHttpsRedirection()中的app.UseHsts()StartUp;
    2. 暴露不安全的端口,在开发过程中通常为80或5000。
    3. 使用下面的代码在.NET Framework客户端中创建不安全的通道。
ConfigureServices(IApplicationBuilder app)

安全的SSL连接.NET Framework客户端+ ASP.NET Core服务器

我通过在客户端中使用.pem格式的同一服务器证书来使其与SSL端口配合使用。

var channel = new Channel("localhost", 5001, secureCredentials);

一些解释。 VS 2019中的ASP.NETCore模板使用开发证书 与SslCredentials secureCredentials = new SslCredentials(File.ReadAllText("certificate.pem")); var channel = new Channel("localhost", 5001, secureCredentials); 上的pfx文件一起使用 密码= %AppData%\ASP.NET\Https\ProjectName.pfx 您可以从%AppData%\Microsoft\UserSecrets\{UserSecretsId}\secrets.json {:Kestrel:Certificates:Development:Password} Value获取UserSecretsId的ID。对于每个ASP.NET Core项目,这都是不同的。

我使用以下命令将pfx +密码组合转换为ProjectName.csproj文件。

certificate.pem

这将提示您输入pfx密码。使用以上openssl pkcs12 -in "<DiskLocationOfPfx>\ProjectName.pfx" -out "<TargetLocation>\certifcate.pem" -clcerts 中的密码。

提供一些密码来生成secrets.json(至少4个字母)。

复制此certificate.pem,以供gRPC .NET Framework客户端访问并在其中使用

cerificate.pem

请注意,我使用的端口5001是ASP.NET Core应用程序的SSL端口。

用于生产方案

使用来自证书签名机构的有效证书,并在ASP.NET Core Server和.NET Framework客户端中分别使用与SslCredentials secureCredentials = new SslCredentials(File.ReadAllText("<DiskLocationTo the Folder>/certificate.pem")) var channel = new Channel("localhost", 5001, secureCredentials); pfx相同的证书。

答案 1 :(得分:3)

您可以通过config在不安全的情况下配置.net核心grpc服务器

有2种方法,

launchSettings,json

{
  "profiles": {
    "DemoService": {
      "commandName": "Project",
      "launchBrowser": false,
      "applicationUrl": "http://localhost:5001",
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      }
    }
  }
}

appsettings,json

"Kestrel": {
    "EndpointDefaults": {
      "Protocols": "Http2"
    },
    "EndPoints": {
      "Http": {
        "Url": "http://localhost:5001"
      }
    }
  }