我有一个移动应用程序,我将图像放在Azure存储Blob中。当我们的几个人(测试和测试版)测试时,这一切都很好。但是当我们将它发布到测试阶段并且有数百个(可能超过一千个)用户使用时,很多人都报告他们看不到图像。它发生在他们的iPhone以及许多不同品牌的Android手机上。有时,对于相同的图像,在一部手机上它是好的,但在另一部手机上它不会显示。
当我检查blob日志时,我看到了很多错误,主要是这两个错误:
AnonymousClientOtherError; 304
"按预期失败的匿名请求,通常是指定前置条件失败的请求。 GET请求的前置条件检查(如If- Modified等)失败的匿名请求总数。 示例:未通过检查的条件GET请求。" (来自Microsoft)
AnonymousNetworkError; 200
"此错误的最常见原因是客户端在存储服务中的超时到期之前断开连接。您应该调查客户端中的代码,以了解客户端与存储服务断开连接的原因和时间。您还可以使用Wireshark,Microsoft Message Analyzer或Tcping来调查客户端的网络连接问题。 " (来自微软) - 这里有一个问题,这是一个错误,但为什么它是200?
我想知道这些是导致我问题的原因吗?
对于第一个,根据我的理解,它实际上并不是一个错误,它只是说缓存的版本客户端与服务器版本相同。但是当我的客户端看到这个响应时,它认为这是一个错误并抛出异常,因此没有显示图像? (我实际上将我的客户端外包,所以我只能猜测)
对于第二个,是因为我的客户端超时短于服务器端的超时?但超时是连接超时还是套接字超时?客户端和Azure Blob上的默认值是什么?
我的Azure服务器位于东亚(香港),但我的用户位于中国大陆。我想知道这是否会引起问题?但是当一些用户在中国接受测试时,这一切都很好。
许多图像实际上非常小,只有一到两百k。有些只有11k。
我无法弄清楚是什么原因......
答案 0 :(得分:0)
这些公开可访问的图片吗?如果是,我们建议使用CDN为Azure中的blob提供服务,因为在扩展消费者数量时,您可能会达到单个流行图像的限制限制。
此外,最好确保应用程序与Azure存储之间不存在网络问题,这可能导致最终用户客户端在存储服务超时到期之前断开连接。第一步是使用Wireshark或Microsoft Message Analyzer来调查网络连接问题。请按照“监控,诊断和排除Microsoft Azure存储故障”附录中的“使用Wireshark捕获网络流量”(http://azure.microsoft.com/en-us/documentation/articles/storage-monitoring-diagnosing-troubleshooting/)部分,确定问题是由网络丢弃引起的。