当前位置: 首页 > 知识库问答 >
问题:

如何在?NET框架?

韦寒
2023-03-14

我按照以下网址的说明进行了操作:

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:)连接?

共有2个答案

韩琛
2023-03-14

您可以通过配置在不安全的情况下配置.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"
      }
    }
  }
易元青
2023-03-14

无论是否通过SSL,您都需要在ASP。NET核心服务器。在appsettings中也是如此。json,这样做。

"Kestrel": {
    "EndpointDefaults": {
      "Protocols": "Http2"
    }

不安全。NET Framework客户端ASP.NET核心服务器

    < li>ASP。网络核心服务器 < ol > < li >删除< code >应用程序。使用HttpsRedirection()和< code >应用程序。UseHsts()在< code>StartUp类< code > configure services(IApplicationBuilder应用程序)中; < li >在开发过程中暴露不安全的端口,通常为80或5000。 < li >使用下面的代码在中创建不安全的通道。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或? 我试图追踪一个问题,即继承另一个测试类的测