【问题标题】:Download Bulk Images from Azure Blob C# - Request Time out Issue从 Azure Blob C# 下载批量图像 - 请求超时问题
【发布时间】:2016-12-28 03:17:13
【问题描述】:

我们将文件存储到 Azure blob 中,我们允许用户从我们的网站下载多个 zip 格式的文件(可以是 500-1000 个文件)。我们已经放置了一个代码,但它需要更长的时间来执行,并且因为我们将我们的网站托管在 Azure Web 应用程序上,所以它的 500 请求超时。有人可以帮助我们展示如何改进并使其更快吗?

请找到我们所做的代码。

string[] pods;
                            string fileName = "";
                            try
                            {
                                System.IO.Directory.CreateDirectory(path);
                                foreach (var item in objData)
                                {
                                    pods = item.POD.Split(new string[] { "," }, StringSplitOptions.None);
                                    foreach (var itemPOD in pods)
                                    {
                                        string[] data = itemPOD.Split(new string[] { "/" }, StringSplitOptions.None);
                                        fileName = System.IO.Path.Combine(path, DateTime.Now.ToString("dd_MM_yyyy") + "_" + data[data.Length - 1]);
                                        try
                                        {
                                            var stream = new WebClient().OpenRead(itemPOD);
                                            using (System.Drawing.Image img = System.Drawing.Image.FromStream(stream))
                                            {
                                                img.Save(fileName, System.Drawing.Imaging.ImageFormat.Jpeg);
                                                GC.Collect();
                                            }
                                        }
                                        catch (Exception)
                                        {

                                        }
                                    }
                                }
                                FileDownloads objFileDownload = new FileDownloads();
                                var filesCol = objFileDownload.GetFile(path);
                                using (var memoryStream = new MemoryStream())
                                {
                                    using (var ziparchive = new ZipArchive(memoryStream, ZipArchiveMode.Create, true))
                                    {
                                        for (int i = 0; i < filesCol.Count; i++)
                                        {
                                            ziparchive.CreateEntryFromFile(filesCol[i].FilePath, filesCol[i].FileName);
                                        }
                                    }
                                    return File(memoryStream.ToArray(), "application/zip", "Attachments.zip");
                                }
                            }
                            catch (Exception)
                            {

                            }

【问题讨论】:

  • 不能在web app里做,不能在一些后台进程里做吗?
  • 这确实应该使用后台进程来完成。另外,你为什么不并行下载呢?并使用OpenRead的异步方法,见msdn.microsoft.com/en-us/library/…。如果您切换到HttpClient,您可以使用asyncawait。例如使用方法GetStreamAsncmsdn.microsoft.com/en-us/library/hh551738(v=vs.118).aspx
  • 是的,我也想在后台进程中移动它,但是一旦 zip 文件准备好下载,用户应该会收到实时通知,所以 signalR 可能会出现。

标签: c# asp.net-mvc azure azure-blob-storage azure-web-app-service


【解决方案1】:

我们将文件存储到 Azure blob 中,我们为用户提供了从我们的网站下载多个 zip 格式的文件(可以是 500-1000 个文件)的选项。我们已经放置了一个代码,但它需要更长的时间来执行,并且因为我们将我们的网站托管在 Azure Web 应用程序上,所以它的 500 请求超时。

在 Gaurav Mantri 和 Peter Bons 的帮助下,您似乎找到了解决方案。在后台线程中运行长时间运行的任务将比在控制器操作代码中执行它更好。根据您的描述,您在 Azure 网站上托管应用程序,Azure WebJob 将是运行您的任务以压缩多个文件的不错选择。此外,如果您想通过 Signalr 向客户端推送通知,您可能需要 map users to their connections 并保留有关 user&connectionid&zipfile 的信息,然后您可以从 WebJob 调用 Signalr hub 方法将通知推送到 特定用户 让他知道 zip 文件已准备好。

以下链接讨论了“使用 SignalR 从 Azure WebJob 与网站进行通信”,这将很有帮助。

  1. Communicate from an Azure WebJob to your website with SignalR
  2. Communication between a WebJob and SignalR Hub

【讨论】:

    猜你喜欢
    • 2021-12-12
    • 2019-04-06
    • 1970-01-01
    • 1970-01-01
    • 2018-11-21
    • 2018-08-03
    • 2020-10-13
    • 2022-01-22
    • 2021-03-06
    相关资源
    最近更新 更多