Compact Framework - WebRequest иногда дает сбой без причины?

У меня есть веб-сервис, с которым я разговариваю с КПК. В том же каталоге, что и файл asmx веб-службы, у меня есть html-файл, из которого я получаю веб-запрос, чтобы узнать, доступен ли каталог.

Я использую следующий код:

    /// <summary>
    /// Holds the web request for checking the connectivity.
    /// </summary>
    private static WebRequest m_WebRequest;


    /// <summary>
    /// Tests the connection to the provided URL.
    /// </summary>
    /// <param name="url">The URL to test.</param>
    /// <returns>True if the URL was resolved.</returns>
    public static bool TestUrl(string url)
    {

        try
        {


            // Ensure the url is valid
            url = url.Replace("http:\\", "http://");
            url = url.Replace("\\", "/");

            // Create the request
            m_WebRequest = WebRequest.Create(url);
            m_WebRequest.Timeout = 30000;

            // Get the request
            HttpWebResponse response = (HttpWebResponse)m_WebRequest.GetResponse();
            return true;

        }
        catch
        {
            m_WebRequest.Abort();
            return false;
        }

    }

Файл, на который я получаю ответ, всегда один и тот же и всегда доступен с моего компьютера. Это только кажется сбой, когда веб-служба (в том же каталоге, что и файл html) выдает ошибку. Может ли это быть связано?

В качестве альтернативы, есть ли лучший способ узнать, существует ли этот файл в Интернете?


person djdd87    schedule 30.01.2009    source источник


Ответы (6)


Я испытал что-то подобное, когда связь между КПК и Интернетом пропала. WebRequest автоматически открывает соединение GPRS / HSDPA, возможно, на этом уровне есть проблема.

person Zen    schedule 30.01.2009

Ошибка, которую я получаю, - это просто тайм-аут. Т.е. он сидит там до истечения 30 секунд, затем падает. Что раздражает, так это то, что это происходит только тогда, когда веб-служба выходит из строя или выходит из строя. Это похоже на то, что сбой веб-службы блокирует виртуальный каталог.

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

person djdd87    schedule 01.02.2009

Я считаю, что половина проблемы - это подключение устройства для передачи данных. Попробуйте вручную ввести URL-адрес в карманный IE на устройстве. Если это сработает, ваше приложение должно работать. Если это не так, вам нужно сначала разобраться в настройке подключения для передачи данных вашего устройства. Если вы подключены через ActiveSync (или WMDC), попробуйте изменить настройки подключения между Авто / Работа / Интернет, это иногда помогает.

Что касается того, как проверить, существует ли URL-адрес. Используйте запрос HEAD вместо запроса GET. Таким образом, вы не получите все данные, только возвращенные заголовки. Я не специалист по C #, поэтому не могу помочь с запросом HEAD вместо запроса GET.

person Shane Powell    schedule 01.02.2009

URL-адрес всегда работает для IE на мобильном телефоне - он просто не работает из приложения. Это как если бы приложение заблокировано для выполнения запросов или что-то не так в моем тестовом коде (согласно моему исходному сообщению).

person djdd87    schedule 01.02.2009

Да, избавьтесь от общей проблемы и получите конкретное сообщение об исключении, чтобы вы могли больше рассказать о том, что происходит.

Я обнаружил, что часто получаю ошибки в System.Net.HttpWebRequest.finishGetResponse () при работе в CF.NET, и это, скорее всего, прерывание соединения для передачи данных из-за плохого сигнала.

person Jake Stevenson    schedule 03.02.2009

Вместо этого я использовал компонент Ping SDF 2.3. Ошибка всегда была тайм-аутом и возникала только тогда, когда веб-сервис давал ошибку. Все еще необъяснимо, но я полагаю, что проверка, которую я проводил, в любом случае была плохим способом.

person djdd87    schedule 11.02.2009