Azure WCF访问磁盘文件

时间:2012-08-24 18:34:04

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

我在Windows Azure上托管了一个WCF服务作为“云服务”。当服务启动时,它需要将文件/磁盘中的数据填充到其内存中,以便快速访问(换句话说缓存)。现在我正在使用C:\ Documents \ Filestoprocess文件夹,以便WCF调用该文件夹并在其内存中填充该文件夹中的数据数据。我有5000个小文件。我如何在Azure中执行此操作?我是否可以在WCF中调用文件夹路径,以便WCF调用这些文件并打开每个文件并将每个数据保存在文件中?我并不是真的想通过网络使用带宽来寻找复杂的Blob访问。我正在寻找从其自己的公共网址上运行的WCF“云服务”对这些文件进行简单的磁盘I / O访问。

3 个答案:

答案 0 :(得分:2)

您应该尝试使用云存储服务来存储数据,就像您写入本地文件系统一样,它可能会在重新启动服务或回收服务时被销毁。

您可以考虑使用azure驱动器服务,就像创建磁盘潜水一样。它位于blob存储之上。

但如果您真的想在本地文件系统上编写和读取数据,请查看此博文http://blog.codingoutloud.com/2011/06/12/azure-faq-can-i-write-to-the-file-system-on-windows-azure/

它讨论了如何设置服务定义以允许写入本地文件系统。

答案 1 :(得分:2)

根据on the size of your instances,您将获得一个非永久性磁盘,您可以在其中存储此类临时数据。对于一个额外的小实例,最小值为20GB。您不应该直接访问磁盘,但需要使用local resource代替your service definition文件或Visual Studio中的配置(双击Web / Worker角色)。

此存储是非持久性的,这意味着如果删除部署,如果减少实例数,如果出现硬件问题,...则会丢失此处保存的所有数据。如果要保留文件,则应使用blob存储。但在您的情况下,您需要将文件作为某种缓存机制,本地资源是完美的。

如果您的目标是缓存数据,则可能需要查看Windows Azure中包含的缓存功能:Caching in Windows Azure

答案 2 :(得分:1)

Blob访问并不复杂。实际上,您可以从一个blob存储器到本地磁盘下载一个zip文件,解压缩,然后从这5000个小文件中填充你的wcf服务。

查看this msdn page记录DownloadBlobToFile()。基本部分:

CloudBlobClient blobClient = 
        new CloudBlobClient(blobEndpoint, new StorageCredentialsAccountAndKey(accountName, accountKey));

    // Return a reference to the blob.
    CloudBlob blob = blobClient.GetBlobReference("mycontainer/myblob.txt");

    // Download the blob to a local file.
    blob.DownloadToFile("c:\\mylocalblob.txt");

现在:我不同意保存到C:上的根文件夹。相反,您应该获取一些本地存储(可轻松配置)。在角色配置中配置本地存储后,只需询问角色环境,并询问根路径:

var localResource = RoleEnvironment.GetLocalResource("mylocalstorage");
var rootPath = localResource.RootPath;

注意:正如@KingPancake所提到的,可以使用Azure驱动器。但是:请记住,Azure驱动器只能由一个实例写入。您需要为其他实例创建其他快照。我认为使用简单的blob,将文件复制下来(无论是单个zip还是单个文件),然后从那里开始,就会更加简单。

您提到了对网络+带宽的关注。您不需要为同一数据中心内的带宽付费。另外:它非常快:每个核心100Mbps。因此,即使使用Small实例,您也可以非常快速地复制文件,当您转到更大的实例时也是如此。

最后一个想法:在不使用blob存储或Azure驱动器(在blob存储中作为vhd安装)访问5,000个文件的唯一其他方法是从外部源下载文件或捆绑它们使用您的Windows Azure软件包(然后它们将显示在您应用程序的文件夹中,在您插入的任何子文件夹下)。捆绑有两个缺点:

  • 由于尺寸增加,上传部署套件的时间更长
  • 无法重新部署软件包,无法更改任何单个文件。

通过存储在blob中,您可以轻松更改一个(或所有)小文件而无需重新部署代码 - 您只需要将其发送信号以重新读取blob存储或重新启动实例,以便它们自动下载新文件。

相关问题