Попытка одновременных файловых операций - PullRequest
1 голос
/ 24 января 2012

Я пытаюсь создать веб-сайт ASP.NET 4.0 (C #), который выполняет следующие действия: после того, как пользователь нажимает кнопку, принимает пользовательские данные (из текстовых полей) и вызывает сценарий Powershell на сервере.Выходные данные сценария Powershell записываются в текстовый файл на том же компьютере.Сценарий выполняет некоторые хранимые процедуры на сервере SQL.По завершении выполнения скрипта страница считывает содержимое файла журнала и возвращает их на странице.Причина, по которой я регистрирую это так, как я делаю, заключается в том, что мне нужно захватить «подробный» вывод этих операций.

Проблема, с которой я сталкиваюсь, заключается в том, что весь набор команд, которые запускаются после нажатия пользователем кнопкиставится в очередь, если другой пользователь открыл сайт и пытается выполнить ту же операцию.Мне не ясно, почему это происходит.При запуске вне веб-сайта сценарии Powershell выполняются параллельно.Файлы журнала, которые приложение записывает для использования метки времени и введенной пользователем информации, чтобы гарантировать, что они различаются в зависимости от того, кто вводит информацию.

Вот код, который выполняется при нажатии кнопки:

protected void Test_Click(object sender, EventArgs e)
   {
        // Get the current date/time to use a timestamp for the log file
        DateTime curDate = DateTime.Now;
        string logFileName = "D:\\test1\\logs\\" + curDate.Year + curDate.Month + curDate.Day +
            curDate.Hour + curDate.Minute + curDate.Second + curDate.Millisecond + "_" +
            TextBox1.Text.Replace("\\", "_") + "_Test.txt";

        // Clean the Result TextBox
        ResultBox.Text = string.Empty;

        // Initialize PowerShell engine
        var shell = PowerShell.Create();

        // Add a script to the PowerShell shell object that will execute the instructions with the given input
        shell.Commands.AddScript("powershell.exe -file D:\\test1\\ps_script0.ps1 '" + TextBox3.Text + "' '" +
            TextBox1.Text + "' '" + TextBox2.Text + "' '" + TextBox4.Text + "' > " + logFileName);

        // Execute the script
        shell.Invoke();

        // Create a StreamReader object to read the results of the script instructions and then store the file's contents in a string
        StreamReader sr = File.OpenText(logFileName);
        String results = sr.ReadToEnd();
        results = results.Replace("VERBOSE: ", "");
        sr.Close();

        // Set the text of the result box to the string that was read in
        ResultBox.Text = results;
    }

Я надеюсь выяснить, есть ли информация, которую я могу прочитать о том, как разрешить нескольким пользователям нажимать эту кнопку, и запустить ли сценарий бэкэнда одновременно для каждого из них.Я просматривал асинхронные страницы и потоки, но не думаю, что это необходимо в моем случае, поскольку страница каждого пользователя должна иметь свою собственную ветку.Любая помощь здесь высоко ценится.Спасибо!

...