私のWCFサービスは、現在接続が利用可能であり、それを使用できるかどうかを確認する必要があります。多くのリモート データベースがあります。それらの接続は時々奇妙であり、データのクエリなどに使用できません。したがって、たとえば、これは使用される通常の接続文字列です。
User Id=user;Password=P@ssw0rd;Data Source=NVDB1;Connection Timeout=30
取得に使用されるサービスメソッドは次のとおりです
public List<string> GetAliveDBs(string city)
{
if (String.IsNullOrEmpty(city))
return null;
List<string> cityDbs = (from l in alldbs where !String.IsNullOrEmpty(l.Value.city) && l.Value.city.ToUpper() == city.ToUpper() select l.Value.connString).ToList();
// There is no such city databases
if (cityDbs.Count == 0)
return null;
ReaderWriterLockSlim locker = new ReaderWriterLockSlim();
Parallel.ForEach(cityDbs, p =>
{
if (!IsConnectionActive(p.connString))
{
locker.EnterWriteLock();
try
{
cityDbs.RemoveAt(cityDbs.IndexOf(p));
}
finally
{
locker.ExitWriteLock();
}
}
});
return cityDbs;
}
static public bool IsConnectionAlive(string connectionString)
{
using (OracleConnection c = new OracleConnection(connectionString))
{
try
{
c.Open();
if ((c.State == ConnectionState.Open) && (c.Ping()))
return true;
else
return false;
}
catch (Exception exc)
{
return false;
}
}
}
Devart コンポーネントを使用して Oracle DB と通信します。皆さん、あなたの助けを願っています!前もって感謝します!