我遵循了以下指示:
在.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 :)连接?
答案 0 :(得分:4)
是否通过SSL,您需要在ASP.NET Core服务器中打开Http2。因此,在appsettings.json中,执行此操作。
.domain([0,d3.max(function(d) { return d.value; })])
不安全的.NET Framework客户端+ ASP.NET Core服务器
"Kestrel": {
"EndpointDefaults": {
"Protocols": "Http2"
}
类app.UseHttpsRedirection()
中的app.UseHsts()
和StartUp
; 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种方法,
{
"profiles": {
"DemoService": {
"commandName": "Project",
"launchBrowser": false,
"applicationUrl": "http://localhost:5001",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
}
}
}
或
"Kestrel": {
"EndpointDefaults": {
"Protocols": "Http2"
},
"EndPoints": {
"Http": {
"Url": "http://localhost:5001"
}
}
}