SQL数据库通过TCP连接和客户端通信。下面的代码简单尝试打开一个SOCKET连接到特定机器的特定端口上. 如果它失败了, 它返回false. SQL数据库的默认端口是1433, 但该方法接受一个端口号作为参数. 你也可以使用一个IP地址作为地址参数, 或者机器名, 但是DNS必须能够定位机器。
using System.Configuration;
using System.Net.Sockets;
private bool TestForServer(string address, int port)
{
int timeout = 500;
if(ConfigurationManager.AppSettings["RemoteTestTimeout"] != null)
timeout = int.Parse(ConfigurationManager.AppSettings["RemoteTestTimeout"]);
var result = false;
try
{
using(var socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp))
{
IAsyncResult asyncResult = socket.BeginConnect(address, port, null, null);
result = asyncResult.AsyncWaitHandle.WaitOne(timeout, true);
socket.Close();
}
return result;
}
catch { return false; }
}
注意timeout变量. 因为TCP连接会由于网络流量、网速等原因而无法立即生效, 连接在返回前会尝试等待特定的毫秒数.IAsyncResult.AsncyWaitHandle.WaitOne返回true或者false取决于连接是成功还是失败. timeout值存储在配置文件中以便于你根据你本地的网络速度来做出改变.只需调用代码如下:
if(!TestForServer("MySqlServer", 1433))
throw new ApplicationException("Cannot connection to the Sql Server service on MySqlServer");