2012-05-16 153 views
2

我不明白为什么当我打电话时:Windows Azure本地Blob存储访问?

LocalResource ls = RoleEnvironment.GetLocalResource(“mystorage”);

ls.RootPath;

本地文件夹没有创建,我不明白它是如何工作的。 对我来说,这是一个创建的本地路径。所以我应该有。

C:\资源\目录\ xxx.HelloAzureWeb.mystorage \

但没有这样的文件。

编辑: 我想要做的是存储一些xml场景保存文件。在Unity应用程序中,我需要发布(保存它们)并获取(使用它们)这些文件。

+0

当您的应用程序运行时,这些XML将被创建/编辑/保存多次?或者这只会在应用程序启动之前发生一次? – AvkashChauhan

+0

这些XML在运行时会多次编辑,因为场景中有修改,但仅限于重要。 – MaT

+0

重要时刻。 – MaT

回答

2

您对创建本地存储有一些误解。当你调用下面的代码,它不会为您创建本地存储,而是返回到你这是应用程序安装过程中创建的本地存储对象的实例:

LocalResource ls = RoleEnvironment.GetLocalResource("mystorage"); 

要在应用程序定义本地存储或者直接添加以下的CSDEF(以下设置会创建一个本地存储名字mystorage,大小2GB,如果任何情况下VM重新启动或重新启动的角色,本地存储将不干净的内容还有:

<LocalResources> 
<LocalStorage cleanOnRoleRecycle="false" name="mystorage" sizeInMB="2048" /> 
</LocalResources> 

要添加本地存储你也可以选择 - >> [Visual studio>角色属性>本地存储>添加本地存储]选项以及。

当您在Windows Azure应用程序中定义本地存储时,将在驱动器C中添加一个新文件夹C:在Azure VM上,并且在虚拟机启动时在VM中供应角色时完成此操作:

[In Azure VM] 
C:\Resources\directory\[Your_deploymentID].[your_webrolename]_[Role_Instance_Count]\ 

[In Compute Emulator] 
// Lunch your application in Compute Emulator and then open "Compute Emulator UI" to see the Local Storage Path in the command window related to your instance: 
C:\Users\avkashc\AppData\Local\dftmp\Resources\3503509c-2112-45ea-8d63-377fe9f78491\directory\mystorage\ 

一旦你将添加上述ServiceDefinition.csdef中本地存储的特定设置,本地存储将被创建,然后将下面的代码将工作:

LocalResource ls = RoleEnvironment.GetLocalResource("mystorage"); 
ls.Root // returns the correct local storage path 
// Now you can use ls to read/write your data. 
+0

好吧,这就是我的想法。但我回到我以前的问题。如何将本地xml文件发送到我的页面,然后将其存储在blob存储中。关于blob存储我完全失去了。问题是我需要在我的网页中获取文件,正如你所解释的那样,没有办法用例如路径来获取它。但它可能与HTML提交也许我可以“模仿”这种行为? – MaT

+0

请做一件事。写你的目标,而不使用任何blob或本地存储或任何东西。只要简单的一句话,请提供你的问题,然后我可以建议从我的理解中最好的。 – AvkashChauhan

+0

已编辑的问题。 – MaT

0

使用存储模拟器时,本地资源分配只是一个文件目录。根路径看起来与您描述的有所不同,但您应该能够导航到本地计算机上的该目录,该目录最初将为空。你应该在\ users \你\ AppData下面看到它(这是一个隐藏的目录)。

哦,本地资源与Blob存储无关。在Windows Azure中,它只是具有特定大小配额的本地连接磁盘资源。与Blob存储不同,它是非持久存储。因为它是一个本地磁盘,所以适合临时文件写入,缓存等,并且比Blob存储更快,但对于需要坚持的任何事情,您都需要考虑Blob。

+0

感谢您的精确。但是你描述的路径是当你用视觉测试你的东西的时候。当你发布你的作品时,路径就像被描述了一样。 – MaT

+0

对不起 - 我误解了,因为这个问题有点难以阅读。是的,Windows Azure中的目录结构不同,但实际上是相同的。一旦你获得了根目录位置,你就可以自由地读取和写入该位置,直到你设置的配额。 –

1

下面介绍如何访问ASP中的本地存储。NET Web角色:

第1步:创建一个非常简单的ASP.NET Web角色项目

第2步:包括ServiceDefinition.csdef中的以下内容:

<LocalResources> 
<LocalStorage name="mystorage" cleanOnRoleRecycle="false" sizeInMB="2096" /> 
</LocalResources> 

第3步:添加以下在任何ASPX代码(在本例about.aspx)

<div> 
    Local Storage file content: <b><asp:Label ID="fileContent" runat="server" /></b> 
</div> 

步骤4:添加以下代码中的任何aspx.cs(在这种情况下about.aspx.cs):

protected void Page_Load(object sender, EventArgs e) 
{ 
     LocalResource myStorage = RoleEnvironment.GetLocalResource("mystorage"); 
     string filePath = Path.Combine(myStorage.RootPath, "Lesson.txt"); 
     File.WriteAllText(filePath, "First Lesson"); 
     fileContent.Text = File.ReadAllText(filePath); 

} 

就是这样。 我已经在计算模拟器和云端测试过这段代码,它确实有效。

+0

在本地存储中使用和写入没有任何问题。问题是我在本地计算机上有数据(一个xml文件),我想将它存储在Windows云服务中。这些问题是,如何无需任何形式或任何方式传输这些数据。我想在.net页面上传递我的文件的本地路径,并做一个blob.createfile(路径),但没有链接,因为它使用虚拟路径。 – MaT

+0

当你说你想“存储在Windows云服务”,你的意思是在Windows Azure虚拟机或在Windows Azure存储?如果你希望你的文件成为Windows Azure虚拟机的一部分,你需要将它添加到你的Azure应用程序的一部分,并设置“复制本地为真”。如果您想将此文件传输到Azure blob存储,则可以使用第三方工具,例如http://www.cloudberrylab.com/free-microsoft-azure-explorer.aspx或CloudXprorer .. – AvkashChauhan

+0

我找到了一种方法来实现我的目标没有更多的问题我只是将xml数据发送到一个asp.net控制器,并将它作为一个xml blob存储在azure存储中。感谢您的帮助和解释! – MaT

2

对我来说,我存储到存储模拟器blob的文件进入C:\Users\[username]\AppData\Local\DevelopmentStorage\LDB\BlockBlobRoot。不幸的是,它们不是很有用。这只是一堆GUID,但文件大小看起来是正确的。

+0

终于这对我有效! – Ryan