我的WCF服務需要檢查的是現在可用的連接,我們可以使用它嗎?我們有很多遠程dbs。它們的連接有時很奇怪,不能用於查詢數據或其他數據。 因此,舉例來說,這是經常使用的連接字符串:驗證oracle db連接的一些棘手的快速方法
User Id=user;[email protected];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數據庫進行通信。 希望你的幫助,夥計們!提前致謝!
如果您問如何確定您的Oracle連接字符串是否有效,請嘗試連接到它,如果失敗則無效。如果你追求別的東西,你應該在你的*問題*中包含一個問題。 – 2012-02-15 03:26:10
@ M.Babcock問題是連接檢查你建議非常慢,它不能用於快速檢查。順便說一句,問題在於問題的標題。 – kseen 2012-02-15 03:32:17
我一定錯過了問號。如果你想要一個輕量級的方法來預先檢查服務器是否在那裏,然後打開一個telnet連接到它的端口。 – 2012-02-15 03:36:39