Azure blob服务,随机404找不到错误

时间:2016-10-05 19:11:05

标签: azure azure-storage azure-storage-blobs

我们有一个处理外部回调的网络应用程序。为了将我们的应用程序与外部服务隔离,我们使用azure blob存储回调数据(.json)并将消息放入Azure Service总线,以便稍后获取处理服务。 以下代码用于将数据写入blob存储:

        var storageAccount = CloudStorageAccount.Parse(CloudConfigurationManager.GetSetting("MyStorage"));
        var blobClient = storageAccount.CreateCloudBlobClient();
        var container = blobClient.GetContainerReference("containername");
        var dataFileName = Guid.NewGuid().ToString();
        var blockBlob = container.GetBlockBlobReference(dataFileName);
        blockBlob.UploadText(data);
        blockBlob.Properties.ContentType = "application/json";
        blockBlob.SetProperties();

        var connectionString = CloudConfigurationManager.GetSetting("serviceBusCS");
        var queueName = "MyQueue";
        var client = QueueClient.CreateFromConnectionString(connectionString, queueName);

        var payload = new MyCustomMessage {
            Id = dataFileName
        };
        var message = new BrokeredMessage(payload);
        client.Send(message);

在处理方面,我们有一个Web作业,一次读取一个消息并检索数据如下:

            var storageAccount = CloudStorageAccount.Parse("MyCS");
            var blobClient = storageAccount.CreateCloudBlobClient();
            var container = blobClient.GetContainerReference("containername");
            var blockBlob = container.GetBlockBlobReference(message.Id);
            if (blockBlob == null) {
                return;
            }
            if (!blockBlob.Exists()) {
                return; ==> FAILS HERE
            } 
           // Process the message here...
           // Once the processing is done, delete the blob  

这种设计在大多数情况下运作良好,但我们从现在开始使用404-NotFound(上面标有FAILED HERE)。

问题

此代码失败的唯一方法是使用两个具有相同文件名的消息,即:相同的GUID几乎是不可能的,或者我错过了什么? 知道为什么无法找到blob数据吗?

编辑1 从Azure门户中搜索丢失的blob表明blob实际上并不存在。 如果无法将数据写入blob容器,是否应该blockBlob.UploadText(data);抛出?

编辑2

感谢杰森指出去哪里看。我们抓取了我们的日志,发现blob已成功写入。 Web作业启动并处理消息,但一分钟后,恰好一分钟后,我们看到Web作业开始尝试再次处理同一消息,但它无法找到预期作为第一次运行的blob清除blob并删除它。

1 个答案:

答案 0 :(得分:1)

如果客户端应用程序从服务器收到HTTP 404(未找到)消息,则表示客户端尝试使用的对象(例如实体,表,blob,容器或队列)不存在于存储服务。这有很多可能的原因,例如: •客户端或其他进程先前已删除该对象 •共享访问签名(SAS)授权问题 •客户端JavaScript代码无权访问该对象 •网络故障

有关详细信息,请参阅Storage Monitoring, Diagnosing and Troubleshooting Guide

相关问题