2012-08-24 70 views
2

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

回答

1

Blob访问并不复杂。事实上,您可以从blob存储到本地磁盘单独下载一个zip文件,将其解压缩,然后从这5,000个小文件中填入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驱动器只能由一个实例写入。您需要为其他实例创建其他快照。我认为你简单地使用一个简单的blob,复制你的文件(作为单个zip文件或单个文件),然后从那里开始。

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

最后一个想法:在不使用blob存储或Azure Drives(作为vhd在blob存储中安装)的情况下,唯一能够访问您的5,000个文件的其他方法是从外部源或bundle下载文件他们与您的Windows Azure软件包(然后他们会出现在您的应用程序的文件夹中,无论你在他们的任何子文件夹下)。捆绑有两个缺点:

  • 更长的时间来上传你的部署包因添加了大小
  • 无力改变任何单个文件而无需重新部署软件包。

通过存储在blob中,您可以轻松更改小文件中的一个(或全部),而无需重新部署代码 - 您只需指示它从blob存储重新读取或重新启动实例所以他们会自动下载新文件。

2

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

您可以使用Azure驱动器服务进行研究,就像创建磁盘潜水一样。它位于blob存储之上。

但如果你真的想要写和本地文件系统中读取数据看看这篇博客http://blog.codingoutloud.com/2011/06/12/azure-faq-can-i-write-to-the-file-system-on-windows-azure/

它谈论设置您的服务定义,允许写入到本地文件系统。

2

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

这个存储是非永久性的,这意味着如果你删除了你的部署,如果你减少了实例的数量,在出现硬件问题的时候......你把这里保存的所有数据都丢失了。如果你想保留你的文件,你应该使用blob存储。但在你的情况下,你需要这些文件作为某种缓存机制,本地资源是完美的。

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