Создание каталогов в среде среднего доверия?

У меня есть веб-приложение ASP.NET, работающее в среде среднего доверия с поставщиком общего хостинга. Следующий код вызывает исключение SecurityException:

private void TestButton_Click(object sender, EventArgs e)
{
    string directory = Server.MapPath("~/MyFolder/") + "_TestDirectory";
    if (!Directory.Exists(directory))
        Directory.CreateDirectory(directory);
}

Полный текст ошибки:

System.Security.SecurityException: Request for the permission of type 'System.Security.Permissions.FileIOPermission, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' failed.
   at System.Security.CodeAccessSecurityEngine.Check(Object demand, StackCrawlMark& stackMark, Boolean isPermSet)
   at System.Security.CodeAccessPermission.Demand()
   at System.IO.Directory.InternalCreateDirectory(String fullPath, String path, DirectorySecurity dirSecurity)
   at System.IO.Directory.CreateDirectory(String path, DirectorySecurity directorySecurity)
   at ASP.testcreatedirectory_aspx.TestButton_Click(Object sender, EventArgs e)
The action that failed was:
Demand
The type of the first permission that failed was:
System.Security.Permissions.FileIOPermission
The Zone of the assembly that failed was:
MyComputer

Папка, в которой создается подпапка, имеет полные разрешения, поэтому я не думаю, что это проблема. Это похоже на работу в среде со средним уровнем доверия.

Нормально ли для сред со средним уровнем доверия запрещать создание новых каталогов (с помощью метода Directory.Create) и / или есть ли какое-либо обходное решение для этого?


person Mun    schedule 17.06.2011    source источник


Ответы (1)


Пока путь, к которому вы пытаетесь получить доступ, находится в виртуальном каталоге, в котором находится ваше приложение, вы должны иметь доступ к нему со средним доверием. Вы уверены, что у удостоверения вашего приложения есть разрешение на создание папки?

http://msdn.microsoft.com/en-us/library/aa302425#c09618429_015


Изменить: возможно, я неправильно прочитал приведенный выше документ. См. Также эту ссылку, похоже, у вас есть разрешения только на чтение, запись, добавление и обнаружение пути :(

FileIOPermission ограничен. Это означает, что вы можете получить доступ только к файлам в иерархии виртуальных каталогов вашего приложения. Вашему приложению предоставлены разрешения на чтение, запись, добавление и обнаружение пути для иерархии виртуальных каталогов вашего приложения.

http://msdn.microsoft.com/en-us/library/ff648344.aspx

person pseudocoder    schedule 17.06.2011