从 ASP.NET 应用程序访问 Azure 存储帐户文件共享

Posted

技术标签:

【中文标题】从 ASP.NET 应用程序访问 Azure 存储帐户文件共享【英文标题】:Accessing an Azure Storage Account File Share from an ASP.NET Application 【发布时间】:2016-06-16 00:37:35 【问题描述】:

我有一个需要从 Azure 文件共享读取和写入的 ASP.NET 应用程序。我无法直接在 Azure Fileshare 上设置权限,而是我拥有存储帐户密钥和主访问密钥。

我可以在我的服务器上使用“net use”命令将文件共享挂载为驱动器。由于对previous question 的回答,我知道 ASP.NET 将无法看到已安装的驱动器。

我能够在我的本地计算机上让它工作,在我的本地用户下运行 IIS 并将 azure 存储帐户文件共享添加到凭据管理器,但这在服务器上不起作用,所以我错过了一些拼图。

在服务器上,如果我尝试使用访问共享

Directory.Exists(@"\\storageaccountkey.file.core.windows.net\sharename");

这在 ASP.NET 中不起作用(我怀疑这是因为 ASP.NET 无法对共享进行身份验证)。从 LINQpad 运行此代码确实有效并返回 true。

我已尝试将凭据添加到凭据管理器并在我正在运行凭据管理器的用户下运行我的应用程序池,但我仍然从 Directory.Exists() 返回“假”。

为什么我在服务器上看不到目录?

【问题讨论】:

【参考方案1】:

我建议你使用存储客户端库来访问文件共享,查看官方文章https://azure.microsoft.com/en-us/documentation/articles/storage-dotnet-how-to-use-files/

您可以使用下面的代码而不是 Directory.Exists 来访问共享:

    // Parse the connection string for the storage account.
    CloudStorageAccount storageAccount = CloudStorageAccount.Parse(Microsoft.Azure.CloudConfigurationManager.GetSetting("StorageConnectionString"));

    // Create a CloudFileClient object for credentialed access to File storage.
    CloudFileClient fileClient = storageAccount.CreateCloudFileClient();

    // Get a reference to the file share we created previously.
    CloudFileShare share = fileClient.GetShareReference("logs");

    // Ensure that the share exists.
    if (share.Exists())
    
        //do something    
    

【讨论】:

谢谢。我的麻烦是 - 应用程序不是我的。它来自我们的供应商,他没有设置为使用 Azure 库进行阅读,所以如果可能的话,我真的很想弄清楚如何让它作为 SMB 共享工作,而不是要求供应商实现 Azure 特定的代码。 tarun,你找到解决办法了吗? 注意:如果您需要它在本地为您的开发人员工作,那么 SCL 是一个更好的解决方案,因为 ISP 经常阻止 SMB 共享所需的端口。我无法使用 ATT UVerse 或 GoDaddy 专用服务器访问它们。切换到这个库当然不像使用 \\ 路径名那么容易,但还有其他好处。

以上是关于从 ASP.NET 应用程序访问 Azure 存储帐户文件共享的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 asp.net mvc 从 azure 获取访问令牌

从 Azure 存储流式传输 blob - 无法访问已关闭的流

如何将图像从 Asp.net Core IFormFile 上传到 Azure Blob 存储?

如何将图片存储在 asp.net mvc 应用程序的 azure blob 存储中?

ASP.NET Core 应用程序日志未写入 Azure 应用服务中的 Blob

在 asp.net MVC 上创建 Azure 存储表