我按照以下网址的说明进行了操作:
https://docs.microsoft.com/en-us/aspnet/core/tutorials/grpc/grpc-start?view=aspnetcore-3.1
在.NET核心中创建gRPC服务和客户端,一切都很好。
接下来,我需要一个遗留的。NET框架应用程序访问该服务。我找到了一些安装的NuGet包,但没有找到任何告诉你如何使用它们来制作gRPC客户端的东西。我确信它在某个地方,但目前被淹没了。NET Core版本的留档。
我尝试创建一个.NET标准项目来弥补这一差距,但是.NET核心包需要.NET标准2.1,这使得在任何版本的.NET框架中都没有引用它。
谁能告诉我如何做到这一点或为我指出正确的方向?
编辑:所以我找到了一些代码。Net Framework与gRPC一起使用。Net Framework示例默认为不安全的连接,而。Net Core示例默认为安全连接。对于如何更改任何一个都没有明确的路径。我尝试生成一个证书来让客户端连接,但没有成功。
所以我的新问题是:有没有人知道如何说服.Net Core gRPC服务接受不安全(http:)连接?
您可以通过配置在不安全的情况下配置.Net core grpc服务器
有两种方式,
{
"profiles": {
"DemoService": {
"commandName": "Project",
"launchBrowser": false,
"applicationUrl": "http://localhost:5001",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
}
}
}
或者
"Kestrel": {
"EndpointDefaults": {
"Protocols": "Http2"
},
"EndPoints": {
"Http": {
"Url": "http://localhost:5001"
}
}
}
无论是否通过SSL,您都需要在ASP。NET核心服务器。在appsettings中也是如此。json,这样做。
"Kestrel": {
"EndpointDefaults": {
"Protocols": "Http2"
}
不安全。NET Framework客户端ASP.NET核心服务器
var channel = new Channel("localhost", 5000, ChannelCredentials.Insecure);
安全SSL连接到.NETFramework客户端ASP。NET核心服务器
我通过在客户端中使用相同的. pem格式的Server证书使其与SSL端口一起使用。
SslCredentials secureCredentials = new SslCredentials(File.ReadAllText("certificate.pem"));
var channel = new Channel("localhost", 5001, secureCredentials);
稍微解释一下。一个ASP。VS 2019中的NETCore模板使用了一个带有pfx文件的开发证书,位于< code>%AppData%\ASP。NET \ Https \ project name . pfx 。证书的密码将在< code > % AppData % \ Microsoft \ user secrets \ { UserSecretsId } \ secrets . JSON 中提供。您可以从< code>ProjectName.csproj中获取< code>UserSecretsId id。这对于每个ASP.NET核心项目都是不同的。
我们只需要一个< code>certificate.pem文件形式的证书公钥,就可以通过gRPC进行安全通信。使用下面的命令从pfx提取publickey
openssl pkcs12 -in "<DiskLocationOfPfx>\ProjectName.pfx" -nokeys -out "<TargetLocation>\certifcate.pem"
复制此证书。供gRPC.NET Framework客户端使用的pem
。
SslCredentials secureCredentials = new SslCredentials(File.ReadAllText("<DiskLocationTo the Folder>/certificate.pem"))
var channel = new Channel("localhost", 5001, secureCredentials);
请注意,我使用的端口 5001 是我 ASP.NET 核心应用程序的 SSL 端口。
对于生产场景
使用来自证书签名机构的有效证书,并在ASP.NET核心服务器和中使用相同的证书。NET Framework客户端分别命名为< code>pfx和< code>pem。
使用自签名证书
对于在我们自己的html" target="_blank">微服务之间通信的大多数微服务来说,使用自签名证书是一种有效的选择。我们可能不需要权威机构签署的证书。使用自签名证书可能会遇到的一个问题是,证书可能会颁发给某个目标DNS名称,我们的gRPC服务器可能正在其他地方运行,无法建立安全连接。
使用gRPC目标名称覆盖密钥覆盖ssl目标名称验证。
List<ChannelOption> channelOptions = new List<ChannelOption>()
{
new ChannelOption("grpc.ssl_target_name_override", <DNS to which our certificate is issued to>),
};
SslCredentials secureCredentials = new SslCredentials(File.ReadAllText("certificate.pem"));
var channel = new Channel("localhost", 5001, secureCredentials, channelOptions);
我正在尝试构建WebApi应用程序,该应用程序可以使用4.5.net框架托管环境。 我使用的是Visual Studio 2017(15.4.4版本),创建了带有Web Api核心库的空Web应用程序项目。默认情况下,它为4.6. net框架创建。 我将项目的目标框架更改为 4.5,删除并重新安装了所有包(它们现在在 packages.config 中都显示为 targetFramework=“n
我向我的.NET核心应用程序添加了一个app.config文件,如下所示 现在我在下面发现了一个错误 消息“无法加载在应用程序配置文件中注册得实体框架提供程序类型'System.Data.Entity.SqlServer.SqlProviderServices、EntityFramework.SqlServer',以固定名称为'System.Data.SqlClient'得ADO.NET提供程序.
我想要一个显示500、404和403的自定义错误页面 > < li> 在web.config中启用自定义错误,如下所示: 已将 注册为 类中的全局操作筛选器,如下所示: 为上述每条消息创建了一个自定义错误页面。500 的默认版本已经开箱即用。 在每个自定义错误页面视图中声明页面的模型是 对于500,它显示自定义错误页面。对其他人来说,情况并非如此。 我错过了什么吗? 当我阅读< code > Ha
本文向大家介绍.net如何使用Cache框架给程序添加Cache,包括了.net如何使用Cache框架给程序添加Cache的使用技巧和注意事项,需要的朋友参考一下 NET 4.0中新增了一个System.Runtime.Caching的名字空间,它提供了一系列可扩展的Cache框架,本文就简单的介绍一下如何使用它给程序添加Cache。 一个Cache框架主要包括三个部分:ObjectCache、C
我想创建一个在中使用的库。Net框架应用程序和Xamarin应用程序。但是有3个框架版本: .net core .net 框架 .net 标准 所以我无法决定使用我的公共库的版本。 < li >如果我创建一个. net标准库,它能在。net框架和。网芯。 < li >如果我创建一个. net核心库,它能在。net框架和。网络标准。 我对框架感到困惑。
我继承了一个包含单元测试项目的visual studio 2017解决方案。唯一与测试相关的项目引用是Microsoft.Owin.Test。测试包括TestClass和TestMethod属性(在Microsoft . visual studio . test tools . unit testing中定义) 那么,这是否意味着我在使用MSTest或? 我试图追踪一个问题,即继承另一个测试类的测