我的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