Написание счетчика приращений для страницы aspx c # - PullRequest
0 голосов
/ 23 мая 2011

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

int i = 100;
int Counter = i++;

w.Write(Count);

Я хочу, чтобы счетчик начинался с 100, и когда первый пользователь использует систему, его счетное число, выведенное на экран, будет 101. Второй пользователь будет102 ... и т. Д.

Я могу увеличить его, но отображается только значение 101, оно не сохраняет 101 и увеличивает его до 102. Есть мысли?

Ответы [ 3 ]

4 голосов
/ 23 мая 2011

Сохранить счетчик в Приложение хранилище:

// read data
// if no such one is present, set counter to the default value (100, etc)
int count = Application["counter"] as int? ?? 100;

// increment
count++;

// save back
Application["counter"] = count;

// do stuff you want to measure

Но эти данные будут потеряны, если приложение умирает по таймауту, или по другой причине, по которой соответствующий пул приложений перерабатывается.

Таким образом, рассмотрите возможность использования базы данных.Установить локальный SQL Express - довольно простая задача.


Также есть еще одна вещь, которую следует учитывать: если работа не удалась, вы хотите сосчитать ее?

try
{
    DoWork();
    Count(); // count only if success
}
finally
{
    Count(); // count it anyway
}
0 голосов
/ 23 мая 2011

Веб-приложения не сохраняют состояние, поэтому все данные теряются при перезагрузке страницы.Состояние сеанса сохранит данные в памяти:

Session("counter") = i++;

Но учтите, что состояние сеанса для каждого пользователя (поэтому у каждого пользователя будет разное количество).

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

0 голосов
/ 23 мая 2011

Я бы сохранил его в объекте приложения asp или в базе данных. Каждый запрос по сути не имеет состояния, поэтому вы не можете хранить переменную в области без сеансов или баз данных.

var number = Application["NameOfObject"] as int ?? 100;

number ++;
Application["NameOfObject"] = number;

w.write(number);
...