Я работаю над приложением в Asp. net.
У меня есть класс DBHandler, который обрабатывает подключения к базе данных и запросы,
Конструктор DBHandler открывает новый OleDBConnection, функция Dispose DBHandler закрывает и удаляет соединение, обычно это работает.
Некоторый код из класса DBHandler:
readonly OleDbConnection Con;
public DBHandler()
{
string cs = ConfigurationManager.ConnectionStrings["Database"].ConnectionString;
Con = new OleDbConnection(cs);
Con.Open();
}
public void Dispose()
{
Con.Close();
Con.Dispose();
Console.WriteLine("db.dispose");
}
У меня также есть несколько контроллеров / обработчиков запросов, которые обрабатывают get и отправьте запросы,
вот пример кода:
public class CountryInfoHandler : HttpMessageHandler
{
protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage message, CancellationToken token)
{
HttpContent content;
HttpResponseMessage response = new HttpResponseMessage();
......
CountryInfo info = null;
using (DBHandler db = new DBHandler())
{
if (db.DoesCountryExist(parsedUri[3]))
{
info = db.Countries[parsedUri[3]];
}
else
{
info = null;
}
}
content = new StringContent(JsonConvert.SerializeObject(info));
content.Headers.ContentType.MediaType = "application/json";
response = new HttpResponseMessage(HttpStatusCode.OK)
{
Content = content
};
.....
return response;
}
}
Все работает хорошо, если несколько запросов, которые требуют вызовов к базе данных, не поступают одновременно, когда это происходит, я получаю System.Runtime.InteropServices.SEHException.
Я предполагаю, что это вызвано одновременным открытием нескольких соединений с базой данных. Можно ли как-то предотвратить это или иметь множественные соединения без проблем?
В настоящее время я думаю о том, чтобы сделать его классом stati c с функциями OpenConnection и CloseConnection, которые все работают k для одного соединения, но есть ли лучшие способы?