当前位置: 首页 > 知识库问答 >
问题:

并行Blob上载间歇地抛出404错误请求

袁成化
2023-03-14

我的服务很简单,

public class AzureService : IAzureService
{
    private readonly CloudBlobContainer _container;
    public AzureService(ISettings settings)
    {
        var storageAccount = CloudStorageAccount.Parse(settings.BlobConnectionString);            
        var blobClient = storageAccount.CreateCloudBlobClient();
        _container = blobClient.GetContainerReference(settings.BlobContainerName);
    }

    public Task UploadBlobAsync(string fileName, Stream stream)
    {
        var blob = _container.GetBlockBlobReference(fileName);
        return blob.UploadFromStreamAsync(stream);
    }

    public Task DeleteBlobAsync(string fileName)
    {
        var blob = _container.GetBlockBlobReference(fileName);
        return blob.DeleteAsync();
    }
}

此方法从调用,

    public Task SaveAllAsync(Dictionary<string, Stream> images)
    {
        var tasks = new List<Task>();
        foreach (var image in images)
        {
            var fileName = image.Key;
            var stream = image.Value;
            var task = _azureService.UploadBlobAsync(fileName, stream);
            tasks.Add(task);
        }
        return Task.WhenAll(tasks);
    }

我的流是HttpPostedFileBase.InputStream。有时它可以工作,有时我会得到远程服务器返回错误:(400)错误请求。。如果我设置一个断点,它也会起作用。

共有2个答案

马银龙
2023-03-14

你所描述的行为听起来非常像线程问题(即,如果你将代码断点,它会很好地工作,因为当时它实际上是单线程的),导致不完整或无效的数据被发送到Azure Storage API。

您的“var image”定义在多线程环境中可能会出现意外行为(如果您使用ReSharper,它会突出显示此变量并建议更改代码,因为它可能不安全)。

请阅读这篇SO帖子,了解更多信息以及如何更好地实现您的代码

foreach标识符和闭包

洪祺
2023-03-14

我有同样的问题,我试图上传20张图片在一击,单线程作品,多线程使用<代码>等待任务。WhenAll失败,显示“远程服务器返回一个错误:(400)错误请求。”

>

  • 有关更详细的信息,请参阅Microsoft.WindowsAzure.Storage.StorageException中从Upload[xxx]异步方法抛出的请求信息。

    起初,请求信息说了一些关于MD5问题的事情,错误代码为“Md5Mismatch”,买我的直觉说不然,因为单线程像一个魅力,然后..我找到了。。。DefaultRequestOptions.Parallel操作在 CloudBlobClient 对象和问题上的线程计数。

    BlobRequest选项成员MSDN

    < br >

        private CloudBlobContainer ConnectToImageContainer()
        {
            var credentials = new StorageCredentials(AccountName, ImagesContainerKey);
            var account = new CloudStorageAccount(credentials, useHttps: true);
            var client = account.CreateCloudBlobClient();
            client.DefaultRequestOptions.ParallelOperationThreadCount = 64; // max value
            client.DefaultRequestOptions.SingleBlobUploadThresholdInBytes = 67108864; // max value
            var container = client.GetContainerReference(ImagesContainerName);
            return container;
        }
    

  •  类似资料:
    • JMeter HTTP请求-404错误 当我运行jmx文件时,其中一个HTTP请求文件会抛出404错误。屏幕截图如上图所示。 有人能为这个问题提出一些解决方案吗?

    • 我已经编写了一个程序,从usb摄像头捕获图像,并根据检测到的每帧颜色跟踪对象的位置。间歇性(可能在1分钟、10分钟或半小时后发生)我收到错误消息: 我遵循的流程是: 用相机拍摄一帧,cap=cv2。视频捕获(1)/cap。read() 变换几何,cv2。透视图 高斯模糊滤波器,cv2。高斯模糊 BGR到HSV转换,cv2。CVT彩色(模糊帧,cv2.COLOR\u BGR2HSV) 轮廓发现和分析

    • 问题内容: 我只是使用a 从这样的用户那里获取最新的tweet: 这在我的本地主机上运行良好,但是当我将其上传到服务器时会引发以下错误: 警告: file_get_contents(http://api.twitter.com/1/statuses/user_timeline/User.json)[function.file- get-contents]:无法打开流:HTTP请求失败!HTTP /

    • 我们有一个SSL问题,我是99%,这不是你通常的证书信任商店旋转木马。 我们有一个Weblogic服务器试图通过LDAPS与Active Directory建立SSL连接,底层SSL实现是JSSE。 有时,它是有效的。通常在重新启动Weblogic后的几个小时内。 之后,我们开始得到SSL握手错误,与SSL调试打开我们看到: [ACTIVE]ExecuteThread:'10'用于队列:'webl

    • 我已经完成了以下配置并尝试了几乎所有找到的解决方案,但没有任何帮助。当我在战争包中部署Spring启动应用程序时。没有错误记录在weblogic日志中,但应用程序抛出404错误。 web.xml weblogic.xml 应用程序属性 root-context.xml 它包含应用程序特定的配置。 应用程序开始.java 无法从pom.xml中排除tomcat服务器,因为它编译失败。在使用sprin

    • 我想截图一个网页,但无论我做什么木偶总是崩溃。 我将上面的代码保存为web.js,并在cmd中执行节点web.js。它在Chrome窗口出现2秒后就崩溃了,页面没有加载。 (节点:27064)UnhandledPromiserEjectionWarning:#(使用显示创建警告的位置)(节点:27064)UnhandledPromiserEjectionWarning:未处理的承诺拒绝。这个错误可