2014-01-29 7 views
1

У меня есть код, который пытается создать и записать в файл журнала в подкаталоге моего сайта (показано ниже). Если я поместил первый вызов этого кода в Page_Load() событие Default.aspx, он отлично работает каждый раз. Если, однако, я делаю первый вызов этого кода внутри события Global.asax Application_Start(), я получаю исключение, исключающее доступ, из библиотеки .NET IO, хотя путь, отображаемый в сообщении об исключении, верен.Почему в Application_Start не удается создать файл?

Кто-нибудь сталкивался с чем-либо подобным? Это как если бы код, начинающийся с Application_Start(), имеет более ограниченный набор разрешений, чем код, запущенный позже.

Kind желает ~ Патрика

using(StreamWriter writer = new StreamWriter(FullPathAndNameData, true)) 
{ 
    string logEntry = DateTime.Now.ToString() + ": " + formattedMessage; 
    writer.WriteLine(logEntry); 
    writer.Flush(); 
} 

ответ

0

Насколько я знаю, Application_Start не имеет специального разрешения.

Единственное, что я могу придумать, это переместить код внутри Application_Start, путь к файлу перемещается за пределы веб-приложения и ему требуется разрешение.

Вы можете использовать HttpRuntime.AppDomainAppPath.

public class Global : HttpApplication 
{ 
    private void Application_Start(object sender, EventArgs e) 
    { 
     var fullPathAndNameData = string.Format("{0}App_Data\\Log.txt", 
      HttpRuntime.AppDomainAppPath); 

     using (var writer = new StreamWriter(fullPathAndNameData, true)) 
     { 
      string logEntry = DateTime.Now + ": " + "Inside Application_Start"; 
      writer.WriteLine(logEntry); 
      writer.Flush(); 
     } 
    } 
} 
+0

Спасибо за это. К сожалению, поведение точно такое же. Действительно, похоже, что приложение не имеет одинаковых разрешений внутри Application_Start(). – Patrick

+0

Я тестировал вышеуказанный код на локальном компьютере, и он отлично работает. Возможно, у вас есть вопрос «Написать разрешение» на нашем размещенном сайте. – Win

+0

Я могу последовательно создавать/записывать файл в поддире из Page_Load of Default.aspx. Один и тот же код всегда терпит неудачу в Application_Start, даже если файл уже существует и был записан из Page_Load. Я прошел через это с хорошим техническим парнем в моем хостинг-провайдере, и единственный способ заставить его работать - это добавить сетевое разрешение на запись в папку, что означает, что кто-то может писать на него. На самом деле кажется, что разрешения в Application_Start не совпадают, как позже (например, Page_Load). Я не могу найти информацию об этой проблеме в любом месте. Кто-нибудь сталкивался с чем-то подобным? – Patrick

Смежные вопросы