Windows Mobile Professional 6.1 как проверить подключение к Интернету

У меня есть приложение WM 6.1 Prof, которое проверяет обновления, когда пользователь этого желает.

Я хочу проверить, есть ли доступное соединение (GPRS или Wi-Fi), прежде чем он попытается подключиться к серверу.

Я также использую openNETCF.NET dll, вот что я сделал, но он не работает каждый раз,

также я не уверен, какой тип подключения мне следует использовать и так далее.

Хорошо, как ты думаешь, это хорошо?

Большое спасибо!

  private static HttpWebRequest ConnectWeb(string urlx)
  {

      try
      {
          HttpWebRequest request = (HttpWebRequest)WebRequest.Create(new Uri(urlx));

          request.ContentType = @"application/octet-stream";
          request.Credentials = CredentialCache.DefaultCredentials;
          request.Timeout(6000);
          return request;
      }
      catch (Exception ex)
      {
          MessageBox.Show(Lang.CONNECTIONPROBLEM);
          return null;
      }
  }


    private bool downloadTest()
    {

        Stream stream;
        HttpWebResponse response;
        HttpWebRequest request = ConnectWeb(FileManager.url);
        if (request!=null)
        {
            try
            {

                using (response = (HttpWebResponse)request.GetResponse())
                {

                    using (stream = response.GetResponseStream())
                    {
                        byte[] data = ReadFully(stream, (int)response.ContentLength);
                        writeByteArrayToFile(data, "data.zip");                                           
                    }                  
                }

                response.Close();
                stream.Close();

            }
            catch (Exception ex)
            {
                MessageBox.Show(Lang.CONNECTIONPROBLEM);
                return false;
            }

}


person Spring    schedule 13.07.2010    source источник
comment
Извините, как я могу отметить как ответ? Я не мог найти этот вариант   -  person Spring    schedule 28.07.2010


Ответы (1)


Не отключайте диспетчер соединений.

Как только вы используете Windows Mobile Connection Manager, подключаемый модуль к сетевому стеку (Autobind Winsock Layered Service Provider) начинает автоматически привязывать ваши сетевые подключения к сетевому интерфейсу, соответствующему выбранному месту назначения. По сути, это заставляет пакеты идти правильным путем. Если вы запросите отключение, он может их вообще не отправить.

Вместо этого вы должны вызвать Connect, прежде чем пытаться подключиться к серверу обновлений, а затем RequestDisconnect, когда вы закончите с ним. Используйте асинхронное соединение и присоединитесь к событию Connected, если хотите, чтобы оно работало в фоновом режиме.

Чтобы следить за тем, что делает IE при выборе правильного пункта назначения - Wi-Fi или GPRS, - используйте ConnectionManager.MapUrl, чтобы определить GUID пункта назначения и передать его в Connect. Поведение сопоставления по умолчанию:

  • Если часть URL-адреса, содержащая имя сервера, не имеет точек, это рабочий адрес.
  • Если часть имени сервера отображается в списке исключений, это рабочий адрес.
  • В противном случае это адрес в Интернете.

То, что он делает, зависит от того, как настроен ActiveSync / Центр устройств Windows Mobile, если устройство установлено, и что выбрано в разделе «Моя сетевая карта подключается к» для Wi-Fi (Пуск> Настройки> вкладка Подключения> Сетевые карты или WiFi значок). Если для него установлено значение «Работа», а сопоставление - «Интернет», он никогда не будет использовать Wi-Fi. Если для него установлено значение «Интернет», он будет использовать Wi-Fi, если он связан, и вернуться к GPRS, если нет.

Насколько я помню, .NET CF HttpWebRequest автоматически использует диспетчер подключений, следуя поведению IE при сопоставлении пункта назначения, поэтому вам может вообще не понадобиться класс OpenNETCF.

person Mike Dimmick    schedule 13.07.2010
comment
Спасибо за длинный ответ, я не буду использовать opennetCF, вместо этого я отредактировал код, как указано выше, вы можете проверить, все ли в порядке - person Spring; 13.07.2010