Очевидно, что если вы разделяете соединение с БД между несколькими запросами одновременно, то неизвестно, что произойдет.Это по определению undefined .
Что вам нужно сделать, это либо изолировать объект (сделать его нестатичным), либо ввести блокировку, которая заставит входящие запросы ждать бесконечно (до тех пор, покаоперация доступна).
Это не особенно сложно само по себе, но требует осторожности, чтобы не ввести мертвую блокировку.
Я рекомендую не делатьметод static, нестатический метод более изолирован и используется должным образом со своим собственным объектом соединения, поэтому не будет подвержен той же проблеме параллелизма.
Здесь важно то, что соединение с БД не является глобальнымобщий ресурс, когда несколько пользователей нажимают на этот метод, или что-то будет идти не так.
Просто измените его на что-то вроде этого:
static void WebMethod()
{
using (var conn = ProviderFactory.CreateConnection("connection string goes here"))
{
conn.Open();
// Do work here
}
}
Изящная часть вышечто вы не будете спамить сервер соединениями просто потому, что пул соединений включен по умолчанию, при условии, что вы используете провайдера базы данных SqlClient
.Это, однако, даст вам хорошую изолированную область действия conn
для вашей базы данных.