检查启动条件

2023-12-13

我想测试 ASP.Net Core 2.0 应用程序启动时的某些条件。例如,如果我的数据库服务器或其他服务器运行正常。这对于仅在请求后才会实例化的事物(例如我的存储库)特别有用。

目前我必须手动执行此请求,但我希望我的应用程序尽早失败。建议在什么时间、什么地点进行这样的测试?


The Startup类负责设置您的服务器,使其成为为您的应用程序设置一次性初始化内容的完美候选者。

通常有两种主要方法Startup: ConfigureServices and Configure。前者运行得很早,负责设置应用程序服务、依赖项和配置。因此,您无法使用它来实际执行实际工作,特别是因为依赖项注入容器尚未准备好。

但是,那Configure方法有所不同:虽然其主要目的是设置应用程序中间件管道(稍后将服务请求的组件),但您可以在此处充分使用依赖项,从而可以在此处执行更广泛的操作。那么你could直接在此处拨打电话。

重要的是要理解这一点Configure仍然运行得相当早,远早于您的服务器真正准备好服务请求。因此,如果您的初始化取决于已经存在的实际服务器,您可能应该进一步延迟执行。

正确的解决方案可能会使用以下方式融入应用程序生命周期IApplicationLifetime。这种类型基本上为您提供了一种注册在应用程序生命周期期间执行的回调的方法。就您而言,您会对ApplicationStarted当服务器刚刚完成其设置阶段并且现在准备好服务请求时运行的事件。所以基本上是运行一些额外初始化的完美空闲时刻。

为了响应生命周期事件,您需要在Configure method:

public void Configure(IApplicationBuilder app, IApplicationLifetime applicationLifetime)
{
    // other…

    // register lifetime event
    applicationLifetime.ApplicationStarted.Register(InitializeApplication);
}

public void InitializeApplication()
{
    // do stuff
}

最后一点:显然,目前有一个开放的错误这可以防止在 IIS 上托管时触发生命周期事件。在这种情况下,直接执行您的代码Configure可能是最好的选择。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

检查启动条件 的相关文章

随机推荐

  • 用于测验应用程序的 Rails 关联和数据库设计

    我正在构建这个测验应用程序 我希望它有点复杂 我想出了这个数据库模式 但我真的很困惑 对我需要什么关联和东西感到困惑 嗯 需要注意的一件事是 当创建测试时 没有关于参加该测试的考生人数的信息 所以 我创建了test questions an
  • AJAX jQuery 每 5 秒刷新一次 div

    我从一个网站获得了这段代码 并根据我的需要进行了修改 div div
  • 如何使用适当的特异性来设计没有 !important 的 :root 样式

    里面一个自定义元素因为border color在父页面上设置 我无法设置border color不求助于工作 important host player O color var color2 border color var color2
  • perl fork() exec() ,子进程疯狂

    我在用Linux and sh is in tcsh 我做了一个非常基本的fork and exec 但我需要帮助来实施安全措施 基本上我的 perl 脚本调用 sh子进程中的脚本 但当我这样做时Ctrl c为了杀死父进程 子进程会忽略该信
  • Excel 中的链接表和切片器

    我无法在 Excel 中创建一个切片器 该切片器不仅按主表进行过滤 还按辅助表进行过滤 该辅助表应与第一个表 具有作为引用的字段键 链接 换句话说 主表是students表 有一个唯一的ID作为引用 第二个表是每个学生参加的课程 我希望切片
  • CentOS 7 上 Ambari 2.7.5 安装失败

    我正在 CentOS 7 计算机上安装 Apache Ambari 2 7 5 我正在关注Apache 网站上的安装指南 指南第 1 步的最后一个命令 mvn B 全新安装 rpm rpm DnewVersion 2 7 5 0 0 Dbu
  • 将结果右对齐

    我再次问同样的问题 现在提供更多详细信息 希望能得到有效的解决方案 在下面的代码中 输出将打印对齐到行的右侧 table border 1 style width 100 tr td align right div test div td
  • PHP - 根据另一个数组的元素对数组元素进行排序:)

    所以我有两个数组 其中之一看起来像这样 它的值或元素的数量可以改变 array 4dec def3 a3d6 d12f 和另一个 array array id gt d12f name gt John array id gt a5f1 na
  • 在文件夹/目录中搜索特定文件扩展名 (PHP)

    我正在尝试用 PHP 设计一个程序 该程序允许我在由多个文件夹组成的已知目录中查找具有特定文件扩展名 例如 jpg shp 等 的文件 示例代码 文档或有关我需要使用哪些方法的信息将非常感激 glob很简单 对于递归下降有一些建议readd
  • 如何在服务器和 GWT 客户端之间使用 RSA?

    我想加密 Java 服务器后端和 GWT 客户端之间的数据 在 GWT 客户端上我使用sbn js图书馆 它的工作速度非常快 而且比gwt 加密 以下是我如何在给定 RSA e n 的客户端进行加密 我创建了一个JSFiddle var n
  • 简单的 C++ 交换函数

    为什么如果我有这样的函数 要交换两个数字 它不起作用 swap 我知道我可以通过在原型中声明指针来做到这一点 然后将各个变量的地址传递给main 但适用于数组 无需传递指针和地址 不起作用 void num exchange int m i
  • 在 log(n) 时间内获取排序数组中落在特定范围内的元素数量

    假设我有一个以下类的数组 按 y 升序排序 public class Obj public int x public int y 如何找到数组中 y 值在 log N 时间内给定的最小和最大范围内的 Obj 项的数量 我考虑过使用二分搜索来
  • 将 pyspark 字符串转换为日期格式

    我有一个日期 pyspark 数据框 其字符串列的格式为MM dd yyyy我正在尝试将其转换为日期列 I tried df select to date df STRING COLUMN alias new date show 我得到一串
  • 如何为 Tomcat servlet 配置 user.dir?

    在我的 Tomcat servlet 中 我使用一个 jar 库来查找某些 properties文件在System getProperty user dir 问题是 当我在不同的服务器上部署 servlet 时 user dir 是不同的
  • 为什么 gnu 链接器的“--oformat binary”选项将“.data”段放置在 0x0200000

    我一直在为 i386 实模式编写一些 独立 代码 并在 PXE 网络引导我的代码时遇到一些奇怪的错误 PXE E79 NBP is too big to fit in free base memory PXE M0F Exiting Int
  • 如何理解这个 dmesg 错误信息?

    我编写了这个简单的模块来处理设备并调用其一些电源管理方法 例如 suspend and resume 在初始化时 模块简单地查找特定设备并尝试调用其方法 include
  • 如何实现条件字符串格式化? [复制]

    这个问题在这里已经有答案了 我一直在用 Python 开发一个基于文本的游戏 我遇到过一个实例 我想根据一组条件以不同的方式格式化字符串 具体来说 我想显示描述房间中物品的文本 当且仅当相关项目对象位于房间对象的项目列表中时 我希望在房间的
  • 流星 $pull 从数组中删除

    我的数据库中有以下对象 id fTgR2YtHiZBzzqF6J following user id S4dLHRJiuHoyAp26q fb id 100006681067911 name Helen Amffhajfgiaa Laube
  • 我需要使用 FileStream.Flush() 或 FileStream.Flush(true) 吗?

    在我的程序中 我编写一个文件 然后调用读取该文件的外部程序 我需要Flush true 确保数据完全写入磁盘 或者Flush 充足的 class ExampleClass IDisposable private FileStream str
  • 检查启动条件

    我想测试 ASP Net Core 2 0 应用程序启动时的某些条件 例如 如果我的数据库服务器或其他服务器运行正常 这对于仅在请求后才会实例化的事物 例如我的存储库 特别有用 目前我必须手动执行此请求 但我希望我的应用程序尽早失败 建议在