【问题标题】:Uploads within NancyFX hang on uploadNancyFX 中的上传在上传时挂起
【发布时间】:2019-08-09 03:01:36
【问题描述】:

nuget 包 Microsoft.Azure.Storage.File 9.4.2 在某处上传文件 26MB 时无限期挂起。

项目的目标是 .NET (Desktop) Framework 4.7.2。

***** 更新 ***** 当尝试使用各种客户端和各种云服务(我在上传到 S3 时遇到相同的问题)尝试上传大型文件时会出现此问题,但仅在 NancyFx Web 应用程序的上下文中。与部署到 Azure 应用服务时在本地发生的问题相同,因此几乎可以肯定它与我的本地开发配置无关。

需要明确的是,当尝试在 NancyFx 应用程序上传时,上传会挂起;我没有将上传到 NancyFx 应用程序。

目前,我的解决方案是不要从 Nancy 内部上传文件,但如果有人对仍然存在的问题的技术解决方案感兴趣,我会保留这个问题。

***** 结束更新 *****

明确一点,文件上传

尝试使用如下:

public void UploadFileFromFile(string azureFileName, string localFileName)
{
    CloudStorageAccount storageAccount = CloudStorageAccount.Parse(SafeConfig.AzureFileStorageMaterialConnectionString);
    CloudFileClient client = storageAccount.CreateCloudFileClient();
    CloudFileShare share = client.GetShareReference(SafeConfig.AzureFileStorageMaterialShareName);
    CloudFileDirectory dir = share.GetRootDirectoryReference();
    CloudFile fileReference = dir.GetFileReference(azureFileName);
    fileReference.UploadFromFile(localFileName);
}

值得注意的是,当我使用 fileReference.UploadFromByteArray() 方法时,客户端会挂起,当我尝试使用各种 *Async 替代方法时也会挂起。

当我尝试使用方法fileReference.UploadFromStream() 时,我得到一个异常“对象不处于可用状态”,我不认为这是一个特别可操作的异常消息。这是我首选的上传方法,但不同的错误体验可能使其成为一个单独的问题。

【问题讨论】:

  • 您实际上可以使用 CloudBlockBlob.Upload 文件来上传更大的文件,也可以针对慢速互联网等特殊情况进行调整。有时上传操作会因为互联网连接速度慢而失败。这是一篇非常好的文章,它解释了 UploadFIle 的用法,并通过将较大的文件拆分为较小的文件来进行调整。 red-gate.com/simple-talk/cloud/platform-as-a-service/…

标签: c# .net azure-storage nancy azure-storage-files


【解决方案1】:

我使用的包和代码和你的一样,一切都很好,可以上传超过 26M 的文件。您可以尝试重新启动您的 Visual Studio 并重试吗?

我的代码:

using Microsoft.WindowsAzure.Storage;
using Microsoft.WindowsAzure.Storage.File;
using System;

namespace MyConsole
{
    class Program
    {
        static void Main(string[] args)
        {
            Program p = new Program();
            string azureFileName = "1.zip";
            string localFileName = @"D:\1.zip";

            Console.WriteLine("start upload..");

            p.UploadFileFromFile(azureFileName, localFileName);

            Console.WriteLine("completed**");
            Console.ReadLine();
        }

        public void UploadFileFromFile(string azureFileName, string localFileName)
        {
            CloudStorageAccount storageAccount = CloudStorageAccount.Parse("xxxx");
            CloudFileClient client = storageAccount.CreateCloudFileClient();
            CloudFileShare share = client.GetShareReference("testfolder");
            CloudFileDirectory dir = share.GetRootDirectoryReference();
            CloudFile fileReference = dir.GetFileReference(azureFileName);
            Console.WriteLine("going to upload");
            fileReference.UploadFromFile(localFileName);
        }
    }
}

文件可以上传:

【讨论】:

  • 感谢您整理这个示例,Ivan。我发现许多文件上传到许多云服务挂起,但仅在 NancyFx Web 应用程序的上下文中,所以我相应地更新了问题,并已转换为从几乎任何其他执行上下文中上传文件,到目前为止,所有其他执行上下文(控制台应用程序、Azure Web 作业,甚至是 Xunit 集成测试)似乎都可以正常工作。
猜你喜欢
  • 1970-01-01
  • 2017-07-17
  • 2011-06-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-03
  • 1970-01-01
相关资源
最近更新 更多