Помогите мне решить следующую проблему.У меня есть приложение ASP .NET MVC2.Я запускаю его на IIS 7.5.На одной странице пользователь нажимает кнопку, и обработчик для этой кнопки отправляет запрос на сервер (jquery.ajax).При действии сервера в контроллере запускается новый поток (это делает длительный импорт):
var thread = new Thread(RefreshCitiesInDatabase);
thread.Start();
Состояние импорта доступно в статической переменной.Новый поток меняет значение переменной в начале работы.Пользователь также может проверить состояние импорта с помощью этой переменной, которая используется в представлении.И пользователь видит состояние импорта.Когда я запускаю эту функцию несколько минут, все в порядке.На странице я вижу правильное состояние импорта, изменяется количество импортируемых записей, я вижу изменения в журналах.Но через несколько минут начинаются неприятности.Когда я обновляю страницу с состоянием импорта, иногда я вижу, что импорт работает нормально, но иногда я вижу страницу со значениями по умолчанию для импорта (например, приложение только что запущено), но после этого я снова вижу страницу с нормальным состоянием импорта.Я пытался подключить Visual Studio к процессу IIS и отладки приложения.Но когда запрос поступает в контроллер, иногда статические переменные имеют правильные значения, а иногда они имеют значения по умолчанию (static int имеет 0, статическая строка имеет "" и т. Д.).Скажи мне, что я делаю не так.Может быть я должен запустить дополнительный поток другим способом?
Заранее спасибо, Дмитрий
Я добавляю части кода: Контроллер:
public class ImportCitiesController : Controller
{
[Dependency]
public SaveCities SaveCities { get; set; }
//Start import
public JsonResult StartCitiesImport()
{
//Methos in core dll, which makes import
SaveCities.StartCitiesSaving();
return Json("ok");
}
//Get Information about import
public ActionResult GetImportState()
{
var model = new ImportCityStatusModel
{ NowImportProcessing = SaveCities.CitiesSaving };
return View(model);
}
}
Класс в Core:
public class SaveCities
{
// Property equals true, when program are saving to database
public static bool CitiesSaving = false;
public void StartCitiesSaving()
{
var thread = new Thread(RefreshCitiesInDatabase);
thread.Start();
}
private static void RefreshCitiesInDatabase()
{
CitiesSaving = true;
//Processing......
CitiesSaving = false;
}
}
ОБНОВЛЕНИЕ Я думаю, я нашел проблему, но все же я не знаю, как ее решить.Мой IIS использует пул приложений с параметром «Максимальное количество рабочих процессов» = 10. И все задачи в приложении обрабатываются несколькими процессами.И мой запрос на контроль состояния импорта всегда обрабатывается разными процессами.И у них разные статические переменные.Я думаю, что это правильный путь для решения.Но я не знаю, как объединить все статические значения в одном месте.