在我的Windows Forms应用程序中(启动时),我使用ping命令检查Internet连接和我的SQL Server是否还活着。
我是否应该使用“更好”的方法命令来完成.NET framework 2.0中的上述任务?
答案 0 :(得分:7)
只需向SQL服务器发出一个小而简单的请求,以查看连接是否有效。除此之外,如果你的连接超时或以其他方式失败,为什么不只是一个明智的处理例外?
答案 1 :(得分:2)
Ping只能用于验证数据包是否可以传送到目的地,但不适合检查实际服务器是否正常运行。
如果您的服务器配置为提供SNMP,那么获取SNMP信息以了解您的服务器是否正常运行将是更好的选择。
但是,编程SNMP并不是一项简单的任务。如果你真的需要这些好处,那就去吧。
答案 2 :(得分:1)
以下是示例代码:
private bool IsInternetAvailable()
{
bool ret = false;
try
{
HttpWebRequest req = (HttpWebRequest)
HttpWebRequest.Create("http://www.yourremoteserver.com/");
HttpWebResponse res
= (HttpWebResponse)req.GetResponse();
if (res.StatusCode == HttpStatusCode.OK)
{
ret = true;
}
else
{
ret = false;
}
res.Close();
}
catch
{
ret = false;
}
return ret;
}
来源:my own blog
对于SQL Server,最好“尝试连接”。
答案 3 :(得分:1)
在不执行命令的情况下检查网络和MS-SQL Server:
// Setup a timer to call as needed
public bool IsSqlConnectionOpen(string connectionString)
{
bool open = false;
using (var connection = new SqlConnection(connectionString))
{
try
{
connection.Open();
open = true;
connection.Close();
}
catch (SqlException e)
{
// log e.ToString()
}
}
return open;
}
从用于获取SQL Server版本的代码修改。
更新:根据MSDN
,mattcodes提出了关于连接池的一个好处发生致命错误(例如故障转移)时,池会自动清除。
当请求SqlConnection对象时,如果可用的连接可用,则从池中获取它。要使用,连接必须是未使用的,具有匹配的事务上下文或与任何事务上下文无关,并且具有到服务器的有效链接。
如果这还不够,请在connection string中设置Pooling=false
以确定。
答案 4 :(得分:0)
测试互联网连接。 System.Net具有许多有用的功能。 HttpWebRequest
函数将尝试加载网站,您将获得用于测试连接的详细响应。
答案 5 :(得分:0)
要非常小心地将其作为启动逻辑。我已经看到这样的事情堕落到心跳逻辑,这有很多其他有趣的问题。其中之一是,如果你的应用程序将有许多正在运行的实例。如果您的应用程序在大型环境中使用,并且可能有数千个实例在运行,那么心跳逻辑可以添加到网络和服务器负载。或者有时心跳间隔是可配置的,有人将其设置为零或其他一些疯狂的值。
还有一点,我已经看到这个结合在一起,问到DB服务器的问题是它在服务器上的时间。即选择GetDate()
这有两件事,首先你知道服务器和网络正在运行,如果你得到答案。其次,如果您有一些时间关键操作,则可以测量客户端计算机和数据库服务器之间的时钟偏差。有时这一点很重要。