我们可以将ASP.NET Core MVC web应用程序的一部分作为控制台应用程序运行吗?控制台应用程序是使用Wind



我正在进行一个新项目,该项目包含两个主要部分:-

  1. 预定服务,该服务在线从SharePoint读取文件并将其发送到外部API。

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

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

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

  2. 但我不确定第二点是什么?我将如何从系统内部的外部API接收推送数据?我可以在控制台应用程序中定义API端点吗?或者为此,我需要构建像IIS中托管的ASP.NET Core MVC这样的东西,它公开了一些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。

此外,您还可以搜索";在.NET核心3.1中创建具有API门的工作服务;使用Google或Bing,有多个使用API创建工作者服务的教程或示例。

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

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

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

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

连接、主机和数据

这感觉像是一个关键的考虑因素。您可以在IIS或任何其他进程类型(如Windows服务或控制台应用程序)中托管HTTPS端点。但是,你需要将这个过程公开到互联网上,这样Exterma API就可以调用它了,对吗?

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

  • Azure调度程序
  • Azure无服务器API

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

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

你可以通过多种方式发布,使用控制台应用程序并让windows任务调度程序处理调用有点简单,但他们说,简单性是关键,据称:)我会基于线程中建议的.net后台工作人员服务,或者如果有Azure功能的话。

所以"我可以发布/接收推送的数据吗";,当然可以,根据你的经验,你可能会喜欢WCF、SOAP、REST等一些接收/客户端选项,你可以在网上找到大量的例子,这取决于你的商业伙伴知道什么,如果你可以选择,就选择REST。但这真的不重要,这会给商业伙伴带来更多的微笑,你可以让他们访问一个简单的FTP服务,并将文件作为批处理处理,或者在他们上传时使用FileSystemWatcher来触发。

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

因此,我们最终将不得不在构建计划内容之外,仔细阅读并复制此内容,然后修改POST地址以接受它们关闭的负载,如果它们可以玩HTTPREST的话:https://learn.microsoft.com/en-us/aspnet/core/tutorials/first-web-api?view=aspnetcore-5.0&tabs=visual studio