Windows Mobile Professional 6.1, как проверить интернет-соединение - PullRequest
1 голос
/ 13 июля 2010

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

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

Я также использую 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;
            }

}

1 Ответ

1 голос
/ 13 июля 2010

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

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

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

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

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

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

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

...