Мое приложение работает с IBM DB2 через своего поставщика .net (FP5). Когда я оставил заявку в течение длительного времени, и после этого попытаться получить что-нибудь от database- я получаю следующее сообщение об ошибке:IBM.Data.DB2.DB2Exception: ERROR [08001] [IBM] SQL30081N Обнаружена ошибка связи.
---> IBM.Data.DB2.DB2Exception: ERROR [08001] [IBM] SQL30081N A communication error has been detected. Communication protocol being used: "TCP/IP". Communication API being used: "SOCKETS". Location where the error was detected: "SERVER_IP". Communication function detecting the error: "recv". Protocol specific error code(s): "10054", "*", "0". SQLSTATE=08001
я использую рамку сущности для взаимодействия с базой данных и до разбивающихся операций я всегда имею следующий код:
using (EEntities db = EntitiesFactory.CreateEEntity())
{
// ..some operations
}
где:
public static EEntities CreateEEntity()
{
if (!string.IsNullOrEmpty(GlobalCommon.DBConnectionString))
return CreateEEntity(GlobalCommon.DBConnectionString);
return new EEntities();
}
public static EEntities CreateEEntity(string connectionString)
{
return new EEntities(connectionString);
}
и:
public static string DBConnectionString
{
get
{
if (!string.IsNullOrWhiteSpace(_DBConnectionString))
return _DBConnectionString;
string providerConnectionString = "Database=" +
Settings.Default.DBDatabase + ";User ID=" +
DBUserID + ";Password=" +
DBPassword + ";Server=" +
DBServer + ";Max Pool Size=150;Min Pool Size=15;Connection Lifetime=80;Pooling=true;";
// Initialize the EntityConnectionStringBuilder.
EntityConnectionStringBuilder entityBuilder =
new EntityConnectionStringBuilder();
//Set the provider name.
entityBuilder.Provider = "IBM.Data.DB2";
// Set the provider-specific connection string.
entityBuilder.ProviderConnectionString = providerConnectionString;
// Set the Metadata location.
entityBuilder.Metadata = @"res://*/DAL.DBModel.csdl|
res://*/DAL.DBModel.ssdl|
res://*/DAL.DBModel.msl";
_DBConnectionString = entityBuilder.ToString();
return _DBConnectionString;
}
set
{
_DBConnectionString = value;
}
}
так что я думаю, что со следующими строками я всегда подключаюсь, если соединение было прекращено.
Может возникнуть проблема с пулом или продолжительностью подключения? ..
Но как подключиться? .. Если я позвоню с помощью (EEntities db = EntitiesFactory.CreateEEntity()), разве это не значит, что он повторно подключается? – 0x49D1
Казалось бы, кто-то EntitesFactory создает объект EntityConnection - вы можете проверить свойство State для этого объекта, чтобы увидеть, все ли соединение открыто, и при необходимости вызвать метод Open для повторного подключения. –
Хорошо, я попробую, спасибо. – 0x49D1