私のアプリケーションは、.netプロバイダー(FP5)を介してIBMDB2で動作します。アプリケーションを長期間離れた後、データベースから何かを取得しようとすると、次のエラーが発生します。
---> IBM.Data.DB2.DB2Exception:ERROR [08001][IBM]SQL30081N通信エラーが検出されました。使用されている通信プロトコル:「TCP/IP」。使用されている通信API:「SOCKETS」。エラーが検出された場所:「SERVER_IP」。エラーを検出する通信機能:「recv」。プロトコル固有のエラーコード: "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;
}
}
次の行で、接続が終了した場合は常に再接続すると思います。
プーリングまたは接続の有効期間に問題がありますか?..