Мы внедряем полнофункциональный веб-сайт (.Net 4.5.1) на сервер IIS.
Мы периодически испытываем ошибку:
Ошибка приложения: система.AggregateException: произошла одна или несколько ошибок.---> System.Exception: SelectAllTOCBasedOnRole не удалось выполнить.---> System.InvalidOperationException: поставщикам данных .Net Framework требуются компоненты доступа к данным Microsoft (MDAC).Пожалуйста, установите Microsoft Data Access Components (MDAC) версии 2.6 или новее.---> System.помечены для удаления.(Исключение из HRESULT: 0x800703FA).
Сайт обращается к базе данных DB2.
На сервере установлен MDAC 2.8.1.Поставщик Microsoft OLE DB для DB2 Версии 5.0 также установлен на всех машинах, на которых работает сайт.
Если мы перезапустим пул приложений, ошибка будет устранена на некоторое время.Ошибка случайным образом запустится снова и продолжится до тех пор, пока пул приложений не будет перезапущен снова.
Это же веб-приложение находится на другом сервере, который, как представляется, не обнаруживает эту проблему, хотя я не вижу каких-либо реальных различий междусерверы и какие компоненты они установили.
Ниже приведен фрагмент кода, который подключается к экземпляру DB2.Может быть, в этом есть что-то прикольное ..?
public async Task<IList<WebTOC>> GetAllTOCAsync(string countryCode, string languageCode, string employeeNumber, string tocIdentifier)
{
IList<WebTOC> results = new List<WebTOC>();
using (OleDbConnection connection = new OleDbConnection(_connectionString))
{
// Parameter order matters with OLEDBCommands
try
{
using (OleDbCommand command = connection.CreateCommand())
using (OleDbDataAdapter adapter = new OleDbDataAdapter(command))
{
command.CommandText = _selectAllTOCCommand;
command.Parameters.AddWithValue("?", $"{tocIdentifier}%");
command.Parameters.AddWithValue("?", countryCode);
command.Parameters.AddWithValue("?", languageCode);
command.Parameters.AddWithValue("?", employeeNumber);
command.Parameters.AddWithValue("?", DateTime.Now.ToString("yyyy-MM-dd"));
LogHelper.Log($"Prepare DB2 Command selectAllToCCommand", level: LogHelper.LogLevel.Debug);
//// FAILS HERE WHEN ATTEMPING TO OPEN THE CONNECTION ////
connection.Open();
try
{
using (INullSafeDataReader dataReader = new NullSafeDataReader(await command.ExecuteReaderAsync()))
try
{
results = dataReader.MapToList<WebTOC>(true);
}
finally
{
dataReader.Close();
}
}
catch (Exception exDR)
{
LogHelper.Log($"Failed to read data from DB2", level: LogHelper.LogLevel.Error);
throw new Exception("Failed to read data from database.", exDR);
}
}
}
catch (Exception ex)
{
/// HITS THIS CATCH ///
LogHelper.Log($"SelectAllTOCBasedOnRole failed to execute", level: LogHelper.LogLevel.Error);
throw new Exception("SelectAllTOCBasedOnRole failed to execute.", ex);
}
finally
{
if (connection.State != System.Data.ConnectionState.Closed)
connection.Close();
connection.Dispose();
}
}
return results;
}