Как вы можете начать процесс с asp.net, не мешая сайту? - PullRequest
3 голосов
/ 07 июня 2010

У нас есть приложение asp.net, которое может создавать файлы .air. Для этого мы используем следующий код:

System.Diagnostics.Process process = new System.Diagnostics.Process();

//process.StartInfo.FileName = strBatchFile;
if (File.Exists(@"C:\Program Files\Java\jre6\bin\java.exe"))
{
    process.StartInfo.FileName = @"C:\Program Files\Java\jre6\bin\java.exe";
}
else
{
    process.StartInfo.FileName = @"C:\Program Files (x86)\Java\jre6\bin\java.exe";
}
process.StartInfo.Arguments = GetArguments();
process.StartInfo.RedirectStandardOutput = true;
process.StartInfo.RedirectStandardError = true;
process.StartInfo.UseShellExecute = false;
process.PriorityClass = ProcessPriorityClass.Idle;

process.Start();

string strOutput = process.StandardOutput.ReadToEnd();
string strError = process.StandardError.ReadToEnd();

HttpContext.Current.Response.Write(strOutput + "<p>" + strError + "</p>");

process.WaitForExit();

Что ж, проблема в том, что иногда процессор сервера достигает 100%, что приводит к очень медленной работе приложения и даже к потере сеансов (мы думаем, что это проблема).

Есть ли какое-либо другое решение о том, как создавать файлы air или запускать внешний процесс без вмешательства в приложение asp.net?

Ура, M.

1 Ответ

5 голосов
/ 07 июня 2010

Проблема здесь: process.WaitForExit();, вы просто останавливаете выполнение приложения. Возможно, вы захотите использовать поток для запуска процесса и какой-нибудь IPC (межпроцессное взаимодействие, например удаленное взаимодействие, именованные каналы), чтобы узнать, когда генерация завершится.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...