блокировка (объект) в C # - PullRequest
0 голосов
/ 22 февраля 2012

Я разрабатываю веб-страницу с asp.net с использованием C #.

У меня есть код, который является критическим. Я хочу, чтобы только один пользователь имел доступ к этому разделу кода одновременно.

Я использовал следующий код

string doc_number = "";
try {
    lock (lock1) {

        doc_number = PostSalaryToSAP();

        // doc_number = "";
        if (doc_number.Length > 6) {
            this.Result.Text = "Posting Successful For Employee id '" + cbEmpID.SelectedItem.Text.ToString() + "' With Doc_number : " + doc_number;
            this.Result.ForeColor = System.Drawing.Color.Green;
            this.btnPost.Enabled = false;
            this.btnDelete.Enabled = false;
        } else {
            this.Result.Text = "Posting Failed ";
            this.Result.ForeColor = System.Drawing.Color.Green;
        }
    }
} catch (Exception ex1) {
    Result.Text = "Posting Unsuccessful ";
    Result.ForeColor = System.Drawing.Color.Green;
}

но с этим кодом эти результаты не генерируются должным образом. Обычно эта строка добавляет одну запись в таблицу базы данных:

doc_number = PostSalaryToSAP();

Но используя этот код, он добавляет 2 строки. В чем собственно проблема, которую я не могу понять? Пожалуйста, помогите

1 Ответ

3 голосов
/ 22 февраля 2012

Предполагая, что это приложение с одним узлом, объект, для которого вы блокируете, должен находиться в области приложения. Помните, что каждый запрос страницы создает новый экземпляр страницы, поэтому, если lock1 является участником этой страницы, несколько запросов смогут одновременно выполнять критический раздел. Создайте объект блокировки в OnApplicationStart Global.asax> Application["SalaryPostLock"].

Если вы запустите приложение в кластере, вам потребуется механизм распределенной блокировки. Пожалуйста, сообщите, если это так?

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