PostgreSQL数据库往往健壮可靠。 它们也能很好地与 .NET版本 应用程序,如自行车电子商务应用程序示例Pedal。
当踏板应用程序从单片转向 微型服务 -基于应用程序,连接到外部数据库有助于提高数据管理的效率和可靠性。 这些组件是松散耦合的,使得组织、保护数据和根据需要扩展数据库变得更加简单。
本教程将指导您设置微服务以与PostgreSQL对话,正确处理数据,并保持最佳性能。 您将了解网络、安全管理凭据、配置数据访问以及确保所有组件顺利通信。
正在检查。 NET微服务
踏板最初是 Java语言 应用程序。 然而,它的一个微服务,自行车服务,现在是一个。 NET微服务。 每个自行车条目都有以下自行车型号的主要代码:
使用系统; 使用系统。 组件模型。 数据注释; 使用系统。 组件模型。 数据注释。 模式; 命名空间RedHatPedalBike。 型号 { [桌子(“自行车”)] 公共级自行车 { [键] [数据库生成(DatabaseGeneratedOption.Identity)] 公共长Id{get;set;} [必需(ErrorMessage=“自行车名称不能为空。”)] 公共字符串名称{get;set;}=“”; [必需(ErrorMessage=“自行车型号不能为空。”)] 公共字符串模型{get;set;}=“”; [列(“date_created”)] 公共日期时间创建日期{get;set;} [必需(ErrorMessage=“自行车价格不能为空”)] 公共int Price{get;set;} 公共字节[]图像{get;set;} [必需(ErrorMessage=“自行车的保修状态不能为空。”)] [栏(“保修_状态”)] 公共字符串WarrantyStatus{get;set;}=“”; } }
此代码表示Pedal系统中的自行车,具有以下属性 姓名
, 型号
, 价格
、和 保修状态
这是一部经典之作。 NET实体模型,设计用于与数据库无缝协作。
该模型构成了ASP中Web API的基础。 NET Core和连接的PostgreSQL web服务。 客户端可以使用其端点访问和操作数据库数据,应用创建、读取、更新和删除(CRUD)操作
我们将微服务部署到 红帽OpenShift 使用 源到图像(S2I)方法 ,重新生成现成的源代码映像。 图1显示了正在运行的微服务。
图1:。 NET微服务。
前提条件
本教程需要以下内容:
了解外部PostgreSQL环境
连接时。 NET微服务到外部数据库,了解数据库设置很重要。 本教程使用PostgreSQL作为服务,以避免安装和维护数据库的麻烦,包括应用备份和更新。 这种方法可以减少对基础架构的关注,而更多地关注编码
连接时的主要注意事项。 作为服务的PostgreSQL的NET应用程序包括:
通过安全套接字层和传输层安全性(SSL/TLS)确保安全连接
配置防火墙和网络的可访问性
考虑数据库服务器的位置以提高数据传输速度
在中正确设置连接字符串。 NET应用程序
最佳设置有助于实现的平稳、安全和可扩展的数据库连接。 NET微服务。
在中配置网络访问。 NET on Red Hat OpenShift
连接您部署的OpenShift。 NET应用程序到外部PostgreSQL数据库需要几个关键步骤。
答:。 NET应用程序在OpenShift的容器化环境中运行,增加了一层网络注意事项。 OpenShift的平台可以帮助您管理这些 容器 以及他们的网络互动。
您可以使用Npgsql 库,为您的应用程序设置网络访问,以便与PostgreSQL数据库通信。 使用NuGet包管理器将Npgsql库集成到您的中。 NET项目。
接下来,创建连接字符串。它提供了连接的所有详细信息。 NET应用程序到PostgreSQL服务器,如下例所示:
string connectionString=“主机=my_Host;用户名=my_user;密码=my_pw;数据库=my_db”;
更换 我的主机(_H)
, 我的用户(_U)
, 我的密码
、和 我的数据库
包含PostgreSQL服务器的实际详细信息。
在容器化环境中运行应用程序需要使用安全连接(如SSL/TLS)并高效地管理资源。 OpenShift的内置工具路由和服务配置有助于建立安全的网络通信。
在中建立安全凭据管理。 净值
为了确保应用程序的安全性,请避免在源代码中硬编码数据库凭据。 相反,请使用未存储在版本控制中的环境变量或配置文件。
您可以使用 秘密管理员 用于在本地计算机上创建机密的工具。 在本地终端上执行以下命令:
dotnet user-secrets set postgres-username replace-with-your-postgres-用户名 dotnet用户机密设置postgres密码替换为您的postgres密码
您可以使用 配置管理器
中的类。 NET或中的IConfiguration接口。 NET Core访问这些值,如以下代码所示:
var配置=构建器。 配置; var用户名=配置[“postgres-username”]; var password=配置[“postgres-password”]; //用实际环境变量替换连接字符串中的占位符 var connectionString=构建器。 配置。 GetConnectionString(“默认连接”) .Replace(“{USERNAME}”,用户名) .替换(“{PASSWORD}”,密码);
当前的方法将敏感信息存储在本地计算机文件夹中,但您可以使用OpenShift的 秘密管理 而不是功能。 创建一个YAML文件,如下所示:
api版本:“v1” kind:“秘密” 元数据: name:“我的秘密” 字符串数据: mysecretconfig:'{“postgres-username”:“wllyumrq”, “postgres-password”:“your-postgres-password“}”
然后,使用 oc公司
命令类似于以下命令以创建密码:
oc创建-f mysecret.yaml
正在设置。 PostgreSQL的NET数据访问
集成时,建立健壮的数据访问层是非常重要的。 NET应用程序和外部PostgreSQL数据库。 此方法涉及配置连接字符串和选择适当的数据提供程序。
连接字符串包含与数据库建立连接所需的信息。 英寸。 NET,通常在配置文件中定义它(如 appsettings.json(应用设置.json)
英寸。 NET核心)。
下面是PostgreSQL连接字符串的示例:
“ConnectionStrings”:{“DefaultConnection”:“主机=pom.db.elephantsql.com;端口=5432;数据库=wllyumrq;用户名={Username};密码={Password};信任服务器证书=true;”}
实体框架(EF)核心对象关系映射(ORM)工具启用。 NET开发人员使用。 NET对象来处理数据库,消除了大多数数据访问代码。 按照以下步骤进行设置。
创建模型
在C#类中定义数据模型,就像前面的Bike模型一样。
使用DbContext
创建继承自的上下文类 数据库上下文
。将其配置为与PostgreSQL一起使用Npgsql,如下所示:
公共类BikedbContext:DbContext { public BikedbContext(DbContextOptions<Bikedb上下文>选项) :base(选项) { } 公共虚拟数据库集<Bike>Bike{get;set;} }
管理迁移
EF Core的迁移有助于管理数据库模式更改。 使用以下命令迁移和更新数据库:
添加迁移初始化提交
更新数据库
实现数据库连接
在中实现数据库连接。 NET7应用程序,您将使用EF Core或其他ORM配置连接字符串以进行数据操作,并添加健康检查以监视PostgreSQL数据库。
以下自行车模型显示了 数据库上下文
中的类。 净值7:
使用Microsoft。 实体框架核心; 使用RedHat踏板自行车。 模型; 公共类BikedbContext:DbContext { 公共数据库集<Bike>Bikes{get;set;} public BikedbContext(DbContextOptions<Bikedb上下文>选项) :base(选项) { } 受保护的覆盖void OnModelCreating(ModelBuilder ModelBuilder) { 模型生成器。 实体<自行车>()。 ToTable(“自行车”); } }
将ORM与您的集成。 NET微服务,在中注册DbContext。 NET Core的依赖注入容器。 通常,您可以在 程序.cs
使用如下代码创建文件:
var builder=Web应用程序。 CreateBuilder(参数); //将服务添加到容器中。 建设者。 服务。 AddDbContext<踏板自行车Context>(选项=> 选项。 UseNpgsql(builder.Configuration.GetConnectionString(“踏板自行车连接”)); var app=构建器。 构建(); //剩下的代码,包括本文中已经介绍的代码片段 应用程序。 运行();
.NET 7支持添加健康检查以监视PostgreSQL数据库的可用性和性能。 为健康检查服务向Program.cs添加以下代码:
//将服务添加到容器中。 建设者。 服务。 添加健康检查() .AddNpgSql(connectionString); 应用程序。 使用端点(端点=> { //映射健康检查端点 端点。 MapHealthChecks(“/health”); });
此代码创建一个 /健康
端点。 当您访问端点时,它会运行健康检查并返回应用程序和数据库连接的健康状态。
确保安全通信
您可以在中保护PostgreSQL数据传输。 NET 7,通过加密数据库连接字符串并使用SSL/TLS。 例如,将以下代码添加到Program.cs文件以设置数据保护服务:
var builder=Web应用程序。 CreateBuilder(参数); 建设者。 服务。 AddDataProtection(); //其他服务配置。。。
使用以下代码对存储的连接字符串进行加密并解密以供使用:
var protector=服务提供商。 GetDataProtector(“ConnectionStrings:Protect”); var encryptedConnectionString=保护器。 保护(“your-connection-string”); var decryptedConnectionString=保护器。 Unprotect(encryptedConnectionString);
你可以存储 加密连接字符串
在您的配置和使用中 解密连接字符串
连接到数据库。
SSL/TLS对于在之间安全传输数据至关重要。 NET应用程序和PostgreSQL数据库,需要双方进行SSL配置。 要在PostgreSQL中启用SSL连接,请在服务器端设置 ssl协议 选择 在 并提供有效的SSL证书。
在中启用SSL。 NET连接字符串,将该字符串修改为需要SSL,如下所示:
“ConnectionStrings”(连接字符串):{ “PostgreSqlConnection”:“主机=myhostname;端口=5432;数据库=mydbname;用户名=myusername;密码=mypassword;SSL模式=必需;信任服务器证书=true”
然后,在SSL握手期间验证服务器的SSL证书以确保安全。 NET到PostgreSQL的连接。
验证连接
接下来,通过验证来确保功能。 NET 7应用程序与PostgreSQL数据库的连接。 使用配置的连接字符串执行基本测试:
using var context=new PedalBikeContext(); 尝试 { 上下文。 数据库。 OpenConnection(); 慰问。 WriteLine(“连接成功”); } catch(异常ex) { 慰问。 WriteLine($“连接失败:{ex.Message}”); } 最后 { 上下文。 数据库。 CloseConnection(); }
建立基本连接后,运行以下简单查询:
using var context=new PedalBikeContext(); 尝试 { var bikeCount=上下文。 自行车。 计数(); 慰问。 WriteLine($“数据库中的自行车数量:{bikeCount}”); } catch(异常ex) { 慰问。 WriteLine($“查询失败:{ex.Message}”); }
代码段使用 踏板自行车上下文
要建立数据库连接,请统计Bikes表中的自行车条目数,并打印计数(如果查询失败,则打印错误消息)。
在OpenShift上部署和构建应用程序
部署时。 NET踏板微服务到Red Hat OpenShift,使用S2I框架简化构建过程。 属性将应用程序的源代码自动转换为可部署的容器映像。 NET 7运行时。 OpenShift使用源存储库中的配置和。 NET7S2I构建器映像来有效地处理构建和部署,获取代码并将其打包到容器映像中。
您可以使用 命令生成应用程序 如下所示。
oc new-app网站:7.0~ https://github.com/your_project网站 -e DOTNET_STARTUP_PROJECT=您的项目.csproj-e DOTNET_ASSEMBLY_NAME=您的项目.csproj
结论
现在您已经完成了连接的基本步骤。 NET 7应用程序到外部PostgreSQL数据库。 您学习了如何在OpenShift中配置网络访问,强调安全连接和正确的网络策略,然后建立了安全凭据管理。
接下来,您进行了配置。 NET数据访问PostgreSQL使用实体框架,通过集成ORM工具和实现了数据库连接。 NET微服务,并设置运行状况检查。 现在您知道了如何使用加密的连接字符串和SSL/TLS保护通信,并验证连接,确保应用程序可以有效地与数据库通信。
安全和高效的数据访问在这个微服务体系结构中发挥着关键作用,增强了。 NET应用程序在现代云环境中的性能和可靠性。
现在,您已经准备好在您的内部调整和扩展这些实践。 NET应用程序。 这确保了更健壮、安全和可扩展的解决方案,并与企业级应用程序开发的不断变化的需求保持一致。 接下来,考虑探索其他资源 与一起工作。 NET和Red Hat .