Компактный каркас - WebRequest иногда дает сбой без причины? - PullRequest
0 голосов
/ 30 января 2009

У меня есть веб-сервис, с которым я общаюсь с КПК. В том же каталоге, что и файл asmx webservice, у меня есть 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). Может ли это быть связано?

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

Ответы [ 6 ]

0 голосов
/ 11 февраля 2009

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

0 голосов
/ 03 февраля 2009

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

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

0 голосов
/ 02 февраля 2009

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

0 голосов
/ 01 февраля 2009

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

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

0 голосов
/ 01 февраля 2009

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

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

0 голосов
/ 30 января 2009

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

...