rest - 如何使用 WCF 服务作为 Azure 存储的端点来优化大文件事务?

标签 rest azure azure-storage azure-blob-storage azure-web-roles

我有一个WCF REST 服务作为 Azure 存储的端点。 WCF REST 服务处理通常为 5-10 MB 的文件的上传和下载。 处理流(下载和上传)时,字节位于 Azure VM RAM 内存中,对吧?即使上传数据被分成 4 MB block ,这 4 MB 也会保留在RAM 内存,直到上传完成。对于下载,字节将被保留直到下载完成。 因此,如果我有 1000 个用户同时下载文件,则意味着 Azure VM 应该有 4 GB RAM 仅用于传输。

有办法优化这个吗?当我假设数据保存在虚拟机 RAM 中直到操作完成时,如果我错了,请纠正我。我应该使用 Microsoft 的 Azure REST 服务吗?在传输完成之前,该服务将数据保存在哪里?

最佳答案

我认为您可以通过做几件事来避免将所有数据同时存储在内存中。

  1. 设置您的 WCF 服务以使用流式 TransferMode
  2. 在代码中适当处理您的流。即,打开流到BLOB存储,然后从WCF流复制到 block 中的BLOB流,或者使用Stream.CopyTo() .

大约 6 个月前,我尝试实现此功能,但在我的情况下无法使 WCF 流模式正常工作。开始工作似乎很挑剔,并且可能无法使用 HTTP 端点。话又说回来,也许我的 WCF-fu 太弱了。如果你确实得到了一些东西,请将其发布回此处,因为我非常希望看到它。

请注意,如果您有多个客户端同时下载相同的数据,您可以在内存中保留一个副本并将其独立地流式传输给每个客户端。但我不认为这种方法与我刚才描述的方法兼容 - 你必须选择其中之一。

关于rest - 如何使用 WCF 服务作为 Azure 存储的端点来优化大文件事务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9656695/

相关文章:

java - 使用 Android 设备通过 REST API 保护身份验证?

python - 在客户端创建 UUID 并使用 Django REST Framework 和使用 POST 保存主键

javascript - Node.js API - 来自多个客户端的重复数据请求

java - 在 azure 服务器中缓慢网络上传视频文件时抛出超时异常

asp.net - 文件将文件上传到 Azure Blob 存储

node.js - 如何通过流获取文件

Java 中的 JSON 补丁请求验证

azure - 通过管理组强制所有 Azure 访问

azure - 在 Azure StorageClient 上执行加入

node.js Azure Web App 在长 url 上返回 400