.net 应用程序无法访问Azure存储帐户文件
在Azure windows VM上添加网络驱动器,例如net use T:\.file.core.windows.net\等,或通过power shell命令,可以在power shell中工作并访问文件、拖放等,但在VM上运行的应用程序(即使在同一用户下)无法读取文件。“无法打开文件…DirectoryNotFoundException-找不到路径的一部分…”。发生了什么事?而且它在我的开发机器上本地工作。据我所知,如果您在VM中装载文件共享,您可以在虚拟机中运行代码,使用标准Windows文件I/O API(如.NET Framework中System.IO命名空间提供的API)访问文件共享 根据您的错误消息,我猜您的应用程序的文件路径可能有问题。 我建议您可以检查应用程序的文件路径,然后重试 此外,我建议您可以使用Azure文件共享SDK直接访问该文件 通过使用这种方式,您可以访问该文件,而无需在VM中装载文件共享 这里有一个小演示,希望能给你一些提示: 您可以使用VS中的nugget软件包管理器安装Azure存储SDK.net 应用程序无法访问Azure存储帐户文件,.net,azure,.net,Azure,在Azure windows VM上添加网络驱动器,例如net use T:\.file.core.windows.net\等,或通过power shell命令,可以在power shell中工作并访问文件、拖放等,但在VM上运行的应用程序(即使在同一用户下)无法读取文件。“无法打开文件…DirectoryNotFoundException-找不到路径的一部分…”。发生了什么事?而且它在我的开发机器上本地工作。据我所知,如果您在VM中装载文件共享,您可以在虚拟机中运行代码,使用标准Windows
CloudStorageAccount storageAccount = CloudStorageAccount.Parse(
"connection string");
// 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("brandofirstsharetest");
// Ensure that the share exists.
if (share.Exists())
{
// Get a reference to the root directory for the share.
CloudFileDirectory rootDir = share.GetRootDirectoryReference();
// Get a reference to the directory we created previously.
CloudFileDirectory sampleDir = rootDir.GetDirectoryReference("BrandoTestDirectory");
// Ensure that the directory exists.
if (sampleDir.Exists())
{
// Get a reference to the file we created previously.
CloudFile file = sampleDir.GetFileReference("test2.txt");
// Ensure that the file exists.
if (file.Exists())
{
// Write the contents of the file to the console window.
Console.WriteLine(file.DownloadTextAsync().Result);
}
}
}
Console.ReadLine();
你是如何装载Azure文件共享的?使用什么帐户?可能导致您出现问题的原因是,凭据仅对特定上下文有效,上下文是正在使用的凭据以及它们的身份验证方式 例如,如果您在非管理模式下从命令行窗口装载Azure文件共享,则您使用的帐户将能够在非管理模式下访问该文件共享。如果您以其他用户身份登录,您将无法再访问该文件共享,因为它与您以前使用的用户不同。如果在管理模式下打开命令行窗口并尝试访问文件共享,您将无法访问,因为管理模式和非管理模式是两种不同的上下文 您必须使用将要使用该驱动器的帐户装载该驱动器。几年前,我尝试在windows服务中装载和使用文件共享,发现我无法在windows服务使用的帐户下设置凭据,即使我尝试在特定帐户而不是系统帐户下运行windows服务,因为作为服务运行显然是另一种上下文
如果无法使用与正在使用的驱动器相同的上下文装入驱动器,则可以通过编程方式装入驱动器。Azure存储团队关于的一篇原始博客文章中有关于此的示例代码。这就是我最终使windows服务成功运行的原因。请尝试解决此问题,因为该卷是由运行应用程序的同一用户装载的,或者是以管理员身份运行PowerShell的同一用户装载的。可能相关,也可能无关。其中一个应用程序是在.NET4.6下构建的,其中4.6.2可能对Azure更友好。我知道这并不是一个太长的路径,而且我确信路径中并没有奇怪的字符。我最后添加了一个磁盘,并将其作为我的T:drive挂载,这很有效。所以还是有问题。这可能与运行Windows Server 2012而不是Server 2016的VM有关。另外,我不是在找工作。这项技术应该可以正常工作。更新,一个运行2012年的VM和一个运行2016年的VM,每个都有相同的问题。我已经在VM2012上编写了一个测试演示,我可以使用system.io类直接访问。确保使用正确的用户帐户访问装载的文件磁盘。