C# 用于将上载传递给第三方的ASP.Net体系结构

C# 用于将上载传递给第三方的ASP.Net体系结构,c#,asp.net,asp.net-mvc,youtube,architecture,C#,Asp.net,Asp.net Mvc,Youtube,Architecture,我正在开发一个应用程序,该应用程序设计为站在YouTube API之上,将用户上传到YouTube.Videos.Insert端点(使用他们提供的.NET客户端库)。现在,我的应用程序是作为一个简单的ASP.NET MVC应用程序构建的,但我很快意识到这可能不是最好的方法,因为问题很快就出现了,上传过程可能是一个相当长的运行过程 为了有效地做到这一点,最佳实践架构是什么?到目前为止,我的想法是: 某种队列策略,MVC应用程序将上传放到队列中,然后后台进程将其弹出并进一步上传到YouTube。不

我正在开发一个应用程序,该应用程序设计为站在YouTube API之上,将用户上传到YouTube.Videos.Insert端点(使用他们提供的.NET客户端库)。现在,我的应用程序是作为一个简单的ASP.NET MVC应用程序构建的,但我很快意识到这可能不是最好的方法,因为问题很快就出现了,上传过程可能是一个相当长的运行过程

为了有效地做到这一点,最佳实践架构是什么?到目前为止,我的想法是:

  • 某种队列策略,MVC应用程序将上传放到队列中,然后后台进程将其弹出并进一步上传到YouTube。不过,这似乎效率低下,因为它增加了临时存储文件和再次检索文件以进行处理的应用程序总体开销
  • 一个单独的微服务API,带有一个用于接收实际上传的端点,我将通过Javascript从我的应用程序前端与之联系;它将接收文件,返回一个已接受的文件,并将上载流传递到一个异步线程中,并立即对其进行处理。这似乎更有效,但我担心如果除我之外的任何人最终使用这个东西,那么它的可伸缩性

我希望对解决这一问题的最佳方法有更多的架构见解。

我将使用单独的服务API来解决这一问题。上载许多可能较大的文件是一个长期运行的过程,您不希望触碰您的web应用程序。这种方法的主要优点是,如果出现问题,它不会影响web应用程序。如果上传失败,您不想重新启动web应用程序来说明原因

因为你担心这种方法的可伸缩性,我会考虑使用后台任务管理器,这对于这种类型的火灾来说是完美的,并且忘记任务。就个人而言,我使用并推荐它,因为它附带了一个漂亮的工具,可以让您在任务运行时观察任务。它还允许您在失败时自动重试(可配置),我认为总体上它很适合您的需要

我将它用于类似的情况,其中我需要建立多个websocket连接,如果失败,则重新建立一个websocket连接。我有一个小程序,通过参数将服务添加到我的Hangfire队列中


其他选项包括Quartz.Net和FluentScheduler,但不幸的是我对它们不太熟悉。

因此,如果我理解正确,您的用户将首先上传到您的应用程序,然后你的应用程序会上传到Youtube api?是的——这个想法是为他们提供一个界面来保存他们经常包含在多个视频中的信息,这样他们就不必每次上传时都键入这些信息。哦,很有趣。我一定要去看看Hangfire;看起来非常有用。非常感谢您的洞察力!