繁体   English   中英

我们可以将 ASP.NET Core MVC Web 应用程序的一部分作为使用 Windows 任务调度程序调度的控制台应用程序运行吗

[英]Can we run part of an ASP.NET Core MVC web application as console application which is scheduled using Windows Task scheduler

我正在开发一个包含两个主要部分的新项目:-

  1. 从 SharePoint Online 读取文件并将其发送到外部 API 的计划服务。

  2. 外部 API 将使用人工智能模型处理接收到的文档 >> 从文档中提取数据 >> 然后将提取的数据推送回我们的系统 >> 在那里我们的系统将使用提取的数据更新 SharePoint。

所以目前我正在定义我将要使用的架构和技术,我在这个阶段定义以下内容:-

  1. 对于第一点,我将构建一个 .net 核心控制台应用程序 >> 将其托管在 Windows 服务器中 >> 使用 Windows 任务调度程序对其进行调度。 此服务将使用 SharePoint API 从 SharePoint 读取文件 >> 将它们发送到外部 API。

  2. 但我不确定第 2 点? 我将如何从我们系统内部的外部 API 接收推送数据? 我可以在控制台应用程序中定义 API 端点吗? 或者为此我需要构建类似 ASP.NET Core MVC 托管在 IIS 中的东西,它公开了一些 API 端点来获取推送的数据? 请记住,外部 API 和我们的系统将安装在同一 Windows 服务器中。 或者我可以构建一个 ASP.NET Core MVC Web 应用程序,它将控制器类公开为 API 端点+使用其控制台应用程序program.cs使用 Windows 任务调度程序进行调度?

谢谢

外部 API 处理完数据后,当它向您的系统返回数据时,应该有一个端点供外部 API 调用和发送数据。 因此,您可以创建一个 Asp.net 核心 MVC 应用程序并公开相关的端点方法。

对于控制台应用程序,它是用来创建 Scheduled 服务的,对吗? 如果是这种情况,您可以使用托管服务创建后台任务,并将其添加到您的 MVC 应用程序中,则无需创建控制台应用程序。

您还可以参考此线程: 如何在 ASP.NET 核心应用程序中使用 BackgroundService 每年执行一个方法?

编辑

Asp.net 核心应用程序可以作为 Windows 服务托管在 Windows 上,您可以创建 API 应用程序并将其托管为 Windows 服务,以接收来自外部 API 的数据,请参阅Windows 服务中Host ASP.NET Core

此外,您还可以使用 Google 或 Bing 搜索“在 .NET Core 3.1 中使用 API 门创建工作服务”,有多个教程或示例可以使用 API 创建工作服务。

我对此的想法,已经建立了类似的解决方案:

  1. 调度器感觉很好,除非你想对它进行集群,在这种情况下,你可以使用Quartz.Net 之类的组件来确保每个作业一次只在一台服务器上运行。

  2. 这将取决于外部 API 如何返回结果。 最常见的选择是让您提供 Internet API 端点,并让外部 API 充当其客户端。 您不会使用 MVC 应用程序,因为您没有为外部 API 提供 Web UI - 这是一个示例 .Net Core API

您需要确保 API 端点是安全的,如上例所示。 最简单的选项可能是 API 密钥,但它同样取决于外部 API、其返回结果的选项,可能还取决于其开发人员。

连接、托管和数据

这感觉像是一个关键的考虑因素。 您可以在 IIS 或任何其他进程类型(例如 Windows 服务或控制台应用程序)中托管 HTTPS 端点。 但是随后您需要将该进程公开到 Internet,以便 Extermal API 可以调用它,对吗?

值得一看的是,您是否可以使用 Azure 等云提供商来降低其中一些成本:

这当然取决于数据本身的托管位置以及您是否可以移动部分或全部数据。 这是我首先关注的设计领域。

无论您选择哪个选项,您都可能需要启用与主系统的入站连接。

您可以通过多种方式发布,使用控制台应用程序并让 Windows 任务调度程序处理调用有点简单,但是他们说简单才是王道,据称 :) 我会像建议的那样基于 .net 后台工作者服务线程或 Azure 函数(如果可用)。

所以“我可以发布/接收推送的数据吗”,是的,你当然可以,根据你的经验,你可能想要支持 WCF、SOAP、REST 来列举一些接收/客户端选项,你可以找到一个虚拟铲负载做的例子在网络上,取决于您的业务合作伙伴所知道的,如果您可以选择,请选择 REST。 但这真的不重要,这给商业伙伴带来了更多的微笑,你可以让他们访问一个简单的 FTP 服务并批量处理文件,或者在上传时使用 FileSystemWatcher 来触发。

那么对方是如何推送数据的呢? 好吧,这取决于他们支持什么,您确定他们没有您可以查询的端点吗? 取决于谁拥有主动权,而且大多数情况下我们会构建系统,其中有人已经做了某事,而我们除了他们要求我们的 API 之外什么都不做。

所以我们最终你将不得不超越构建你计划的东西,阅读并复制这个,然后修改一个 POST 地址以接受他们关闭的有效负载,如果他们可以玩 HTTP REST: https : //docs.microsoft.com/ en-us/aspnet/core/tutorials/first-web-api?view=aspnetcore-5.0&tabs=visual-studio

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM