Главная » Silverlight » Мониторинг сетевого соединения

0

В главе 6 вы узнали, как создать приложение, выполняющееся вне браузера. Важно отметить, что оно может выполняться, даже когда сетевое соединение отключено. Однако сохраняет ли работоспособность обычное приложение, когда компьютер отклю­чен от сети? Очевидно, что в этом случае попытки вызвать веб-службу обречены на неудачу. Следовательно, нужно выяснить, есть ли в данный момент соединение, и, если его нет, не пытаться обратиться к службе.

Решить эту проблему несложно. Как вы уже знаете, при неуспешном вызове службы генерируется событие Completed (Завершение) с соответствующим префиксом. Когда приложение реагирует на него, пытаясь извлечь результат, генерируется исключение, извещающее пользователя о проблеме. Если сетевое соединение включено, но данные поступают из Интернета не постоянно, событие Completed генерируется, только ког­да истекает время вызова. С другой стороны, если компьютер полностью отключен от сети, событие Completed генерируется немедленно. В любом случае вы должны пере­хватить исключение и что-нибудь сделать: либо проигнорировать его (тем не менее оно и в данном случае должно быть перехвачено), либо сообщить о нем пользователю.

Код обработки исключения служит для приложения как бы последней линией обо­роны. Однако лучше не доходить до последнего рубежа. Если клиент имеет прерывистое соединение, вы можете решить проблему более аккуратно. Например, в приложении можно учесть текущий статус соединения, выборочно отключая часть средств, когда они недоступны. Этим вы избавите пользователя от неприятных сюрпризов. Выяснить теку­щий статус соединения можно с помощью встроенных в Silverlight средств мониторинга.

Средства мониторинга статуса сетевого соединения состоят из двух классов — Me twor k Inter face и NetworkChange. Оба находятся в пространстве имен System. Net. Metworklnformation. Метод GetlsNetworkAvailable () класса Metworklnterface исполь­зуется для выяснения, подключен ли компьютер к сети. Событие NetworkAddressChanged класса NetworkChanged можно применить для определения момента, когда изменяется статус сетевого соединения или адрес IP. Обычно приложение работает в такой после­довательности: сначала метод GetlsNetworfAvailable () выясняет статус, а затем со­бытие NetworkAddressChanged обеспечивает реакцию на любые изменения.

public MainPage ()

{

InitializeComponent() ;

// Подключение обработчика к событию

NetworkChange.NetworkAddressChanged += NetworkChanged;

// Установка исходного интерфейса пользователя CheckNetworkState ();

}

private void NetworkChanged(object sender, EventArgs e)

{

// Настройка интерфейса соответственно // статусу соединения CheckNetworkState ();

}

private void CheckNetworkState ()

{

if (Networklnterface.GetlsNetworkAvailable()) {

// Сеть доступна

cmdCallCachedService.IsEnabled = true;

cmdCallService.IsEnabled = true;

}

else {

// Сеть недоступна

cmdCallCachedService.IsEnabled = false;

cmdCallService.IsEnabled = false;

}

}

Важно отметить, что средства мониторинга сетевых соединений предназначены лишь для того, чтобы сделать приложение более дружелюбным. Они не предназначены для замены средств перехвата и обработки сетевых исключений. Даже если соедине­ние подключено, нет никаких гарантий того, что компьютер имеет доступ к Интернету, что запрошенный веб-сайт доступен, что метод веб-службы будет выполнен без ошибок и т.д. Поэтому с вызовами служб нужно обращаться осторожно.

Источник: Мак-Дональд, Мэтью. Silverlight 3 с примерами на С# для профессионалов. : Пер. с англ. —- М. : ООО «И.Д. Вильяме», 2010. — 656 с. : ил. — Парал. тит. англ.

По теме:

  • Комментарии