2016-01-16 2 views
1

Приложение для консольного приложения C# работает на другой машине, чем на моем SQL Server 2014. Я использую ado.net для подключения к ней. Как определить, автоматически ли перезагружается сервер sql после установки обновлений Windows? В моем клиентском приложении я использую SystemEvents_SessionEnding, но это мне не помогает.Обнаружение перезагрузки SQL Server

Я читал об отказоустойчивости соединения, но это, похоже, также не решает эту проблему.

Есть ли определенное событие ado.net, которое я могу захватить? Создание приложения на сервере, отправляющем UDP, не является моим предпочтительным решением, так как я не хочу использовать пинг и т. Д.

Я действительно ищу что-то вроде события, на которое можно реагировать.

например. услуги по уведомлению: https://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlnotificationinfo(v=vs.110).aspx

Спасибо!

+0

Какой из следующих вы точно хотите обнаружить? является сервером _available_ или _restarted с момента последнего взаимодействия с ним или _detect, если SQL Server автоматически перезагружается после установки обновлений Windows. – HadiRj

+0

Я хочу знать, что перед перезагрузкой приостановить мое приложение и продолжить, как только он снова будет доступен. – NickD

+1

Ваша проблема не звучит особенно уникально. То есть любой, кто хочет иметь отказоустойчивость в своем приложении, сделает что-то подобное. Один общий подход - попытаться подключиться (или использовать объединенное соединение), и если вы получите сообщение об ошибке, указывающее на то, что сервер недоступен, повторите попытку с более длительными интервалами до тех пор, пока вы не добьетесь успеха. Найдите «экспоненциальную отсрочку» для идей. –

ответ

2

Если вы хотите, чтобы сервер был выключен или нет, вы можете использовать класс Ping.

using System.Net.NetworkInformation; 

var ping = new Ping(); 
var reply = ping.Send("SqlServerIP"); 

if (reply.Status == IPStatus.Success) 
{ 
    //server is available 
} 
else 
{ 
    //server is down 
} 
+0

Извините, мне это действительно не помогает. Я не хочу пинговать на каждом исключении ado.net, которое я обнаружил, если сервер не работает. Я хочу приостановить всю свою программу, например. 3 минуты, когда я получаю уведомление, сервер уйдет на перезагрузку. – NickD

+0

IMHO. Если вы хотите получить уведомление о том, что сервер будет отключен для перезагрузки, то это код на стороне сервера, а не клиентский. – HadiRj

Смежные вопросы