我按照以下说明操作:
在 .NET Core 中创建 gRPC 服务和客户端,一切都很好。
接下来,我需要一个旧的 .NET 框架应用程序访问该服务。我找到了一些安装的 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:) 连接?
Jin*_*ter 10
无论是否通过 SSL,您都需要在 ASP.NET Core 服务器中打开 Http2。所以在 appsettings.json 中,这样做。
"Kestrel": {
"EndpointDefaults": {
"Protocols": "Http2"
}
Run Code Online (Sandbox Code Playgroud)
不安全的 .NET Framework 客户端 + ASP.NET Core 服务器
app.UseHttpsRedirection()和app.UseHsts()在StartUp类中ConfigureServices(IApplicationBuilder app);var channel = new Channel("localhost", 5000, ChannelCredentials.Insecure);
Run Code Online (Sandbox Code Playgroud)
安全 SSL 连接 .NET Framework Client + ASP.NET Core Server
我通过在客户端中使用相同的服务器证书以 .pem 格式使用 SSL 端口。
var channel = new Channel("localhost", 5000, ChannelCredentials.Insecure);
Run Code Online (Sandbox Code Playgroud)
一点解释。VS 2019 中的 ASP.NETCore 模板使用带有 pfx 文件的开发证书位于%AppData%\ASP.NET\Https\ProjectName.pfx. 证书的密码将在 %AppData%\Microsoft\UserSecrets\{UserSecretsId}\secrets.json
您可以UserSecretsId从ProjectName.csproj. 对于每个 ASP.NET Core 项目,这将有所不同。
我们只需要证书的公钥作为certificate.pem文件即可通过 gRPC 进行安全通信。使用以下命令从 pfx 中提取公钥
openssl pkcs12 -in "<DiskLocationOfPfx>\ProjectName.pfx" -nokeys -out "<TargetLocation>\certifcate.pem"
Run Code Online (Sandbox Code Playgroud)
复制它cerificate.pem以供 gRPC .NET Framework 客户端使用。
SslCredentials secureCredentials = new SslCredentials(File.ReadAllText("<DiskLocationTo the Folder>/certificate.pem"))
var channel = new Channel("localhost", 5001, secureCredentials);
Run Code Online (Sandbox Code Playgroud)
请注意,我使用的端口 5001 是我的 ASP.NET Core 应用程序的 SSL 端口。
生产场景
使用来自证书签名机构的有效证书,pfx并pem分别在 ASP.NET Core Server 和 .NET Framework 客户端中使用相同的证书。
使用自签名证书
对于大多数在我们自己的微服务之间进行通信的微服务,使用自签名证书是一个有效的选择。我们可能不需要权威机构签署的证书。我们在使用自签名证书时可能面临的一个问题是,证书可能会颁发给某个目标 DNS 名称,而我们的 gRPC 服务器可能正在其他地方运行,无法建立安全连接。
使用gRPC 目标名称覆盖键来覆盖 ssl 目标名称验证。
SslCredentials secureCredentials = new SslCredentials(File.ReadAllText("certificate.pem"));
var channel = new Channel("localhost", 5001, secureCredentials);
Run Code Online (Sandbox Code Playgroud)
您可以通过 config 在不安全上配置 .Net core grpc 服务器
有2种方式,
{
"profiles": {
"DemoService": {
"commandName": "Project",
"launchBrowser": false,
"applicationUrl": "http://localhost:5001",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
或者
"Kestrel": {
"EndpointDefaults": {
"Protocols": "Http2"
},
"EndPoints": {
"Http": {
"Url": "http://localhost:5001"
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11047 次 |
| 最近记录: |