本文將介紹如何快速檢查遠端的 SQL Server 服務是否正常運作。
在論壇上看到有網友在討論如何利用程式方式檢查遠端伺服器上的服務(例如 SQL Server)是否正常運作,網友 bauann 提到可以利用 Socket 來對伺服器的特定 PORT 進行連接,就可以得知伺服器是否正常。筆者也找到一種利用 TCPClient 來偵測伺服器的狀況,特別利用本文作一下筆記。
【使用 SQLConnection 類別】
下列程式碼使用 SQLConnection 類別搭配 Try Catch 來檢查連接至 SQL Server 的狀態。
1: private static bool TryConnectSQLServer(string hostIP, int port)2: {
3: SqlConnectionStringBuilder scsb = new SqlConnectionStringBuilder();4: scsb.DataSource = hostIP + "," + port;5: scsb.ConnectTimeout = 15; //預設連接逾時為15秒6:
7: using (SqlConnection con = new SqlConnection(scsb.ToString()))8: {
9: try10: {
11: con.Open();
12: return true;13: }
14: catch15: {
16: return false;17: }
18: }
19: }
【使用 TCPClient 類別】
下列程式碼使用 TCPClient 類別來測試 SQL Server 是否正常運作。
1: private static bool TryConnectServerByPort(string hostIP, int port)2: {
3: try4: {
5: IPHostEntry host = Dns.GetHostEntry(hostIP);
6: IPAddress ip = host.AddressList[0];
7: TcpClient tcp = new TcpClient();8: tcp.Connect(ip, port);
9: tcp.Close();
10: return true;11: }
12: catch13: {
14: return false;15: }
16: }
【結論】
經過實測利用 SQLConnection 類別來測試 SQL Server 服務的狀態,會因為預設 ConnectionTimeout 的時間為 15 秒,而顯得等待時間過長,除非您把 ConnectionTimeout 時間縮短。在這個情境下使用 TCPClient 所需等待的時間相對較短,或許可以提供各位在檢查伺服器的特定服務時來參考。
【參考資料】