为什么我在尝试将文件写入 Azure 中的 LocalStorage 时收到 UnauthorizedAccessException

发布于 2024-10-30 01:13:54 字数 1331 浏览 5 评论 0原文

我在我的网络角色中创建了一个名为“MyTestCache”的本地存储,就像在我的网络角色中一样 ServiceDefinition.csdef 文件。但是,当我调用 System.IO.File.WriteAllBytes 方法时,我会收到 UnauthorizedAccess 异常。有谁知道这会是什么原因造成的?在下面的代码中创建目录时我没有得到这个,只有在编写时才得到。我使用的是 SDK 1.3。

 private void SaveFileToLocalStorage(byte[] remoteFile, string filePath)
    {
        try
        {
            LocalResource myIO = RoleEnvironment.GetLocalResource("MyTestCache");

            // Creates directory if it doesn't exist (ie the first time)
            if (!Directory.Exists(myIO.RootPath + "/thumbnails"))
            {
                Directory.CreateDirectory(myIO.RootPath + "/thumbnails");
            }

            string PathToFile = Path.Combine(myIO.RootPath + "/thumbnails", filePath);
            var path = filePath.Split(Char.Parse("/"));

            // Creates the directory for the content item (GUID)            
            if (!Directory.Exists(Path.Combine(myIO.RootPath + "/thumbnails", path[0])))
            {
                Directory.CreateDirectory(Path.Combine(myIO.RootPath + "/thumbnails", path[0]));
            }

            // Writes the file to local storage.
            File.WriteAllBytes(PathToFile, remoteFile);
        }
        catch (Exception ex)
        {
            // do some exception handling
            return;
        }

    }

I have created a local storage in my web role called "MyTestCache" as so in my
ServiceDefinition.csdef file. But when ever I call the System.IO.File.WriteAllBytes method I get a UnauthorizedAccess exception. Does anyone know what would be causing this? I dont get this when creating the directory in the code below, only when writing. I am using SDK 1.3.

 private void SaveFileToLocalStorage(byte[] remoteFile, string filePath)
    {
        try
        {
            LocalResource myIO = RoleEnvironment.GetLocalResource("MyTestCache");

            // Creates directory if it doesn't exist (ie the first time)
            if (!Directory.Exists(myIO.RootPath + "/thumbnails"))
            {
                Directory.CreateDirectory(myIO.RootPath + "/thumbnails");
            }

            string PathToFile = Path.Combine(myIO.RootPath + "/thumbnails", filePath);
            var path = filePath.Split(Char.Parse("/"));

            // Creates the directory for the content item (GUID)            
            if (!Directory.Exists(Path.Combine(myIO.RootPath + "/thumbnails", path[0])))
            {
                Directory.CreateDirectory(Path.Combine(myIO.RootPath + "/thumbnails", path[0]));
            }

            // Writes the file to local storage.
            File.WriteAllBytes(PathToFile, remoteFile);
        }
        catch (Exception ex)
        {
            // do some exception handling
            return;
        }

    }

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

独自←快乐 2024-11-06 01:13:54

检查 ACL。在 SDK 1.3 中,默认情况下 Web 角色在完整的 IIS 工作进程中启动,使用网络服务作为应用程序池的标识。确保网络服务帐户有权执行您期望的操作。在您的情况下,您正在尝试创建一个子目录,因此很可能您至少需要写入权限。如果您的角色还修改此目录的 ACL,您需要授予对此目录的完全访问权限。

Check ACLs. In SDK 1.3 by default web roles are started in full IIS worker process, using Network Service as identity of application pool. Make sure Network Service account has permissions to execute operations you expect. In your case you are trying to create a sub-directory, so most probably you need at least Write permission. If your role also modifies ACLs on this directory, you need to grant Full access to this directory.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文