Неожиданная ошибка при вызове веб-службы погоды из веб-формы - PullRequest
0 голосов
/ 26 апреля 2020

Я пытаюсь вызвать веб-службу погоды из веб-формы (страница ASPX). Ожидаемый результат будет XML ответ с прогнозом погоды. Однако, когда я запускаю веб-форму в браузере, я получаю сообщение об ошибке «Ошибка сервера в приложении».

Описание: HTTP 404. Ресурс, который вы ищете (или одна из его зависимостей), может иметь был удален, изменилось его имя или временно недоступен. Пожалуйста, просмотрите следующий URL и убедитесь, что он написан правильно.

Запрошенный URL: / Home / WeatherServiceForm

Информация о версии: Microsoft . NET Framework Версия: 4.0.30319; ASP. NET Версия: 4.8.4075.0 "

Я считаю, что в моих кодах нет ошибок, и могу думать только о двух возможных причинах ошибки , Во-первых, неправильный Framework, во-вторых, версия пути URL.

Я попытался изменить структуру, которую я использую. Из "ASP. NET Базовое веб-приложение -> ASP. NET Веб-приложение (. NET Framework) Я использую Visual Stud ios 2019, и он автоматически генерирует MVC тип кода.

Во-вторых url.Path = "premium / v2 / weather.ashx"; url.Path должен быть v1 или v2. Я не уверен.

protected void Page_Load(object sender, EventArgs e)
    {
        XmlDocument wsResponseXmlDoc = new XmlDocument();

        //http://api.worldweatheronline.com/premium/v1/weather.ashx?key=****&q=London&format=xml&num_of_days=5
        //id=jipx(spacetime0)
        UriBuilder url = new UriBuilder();
        url.Scheme = "http";// Same as "http://"

        url.Host = "api.worldweatheronline.com";
        url.Path = "premium/v2/weather.ashx";// change to v2
        url.Query = "q=china&format=xml&num_of_days=5&key=******";

        //Make a HTTP request to the global weather web service
        wsResponseXmlDoc = MakeRequest(url.ToString());
        if (wsResponseXmlDoc != null)
        {
            //display the XML response for user
            String xmlString = wsResponseXmlDoc.InnerXml;
            Response.ContentType = "text/xml";
            Response.Write(xmlString);

            // Save the document to a file and auto-indent the output.
            XmlTextWriter writer = new XmlTextWriter(Server.MapPath("xmlweather.xml"), null);
            writer.Formatting = Formatting.Indented;
            wsResponseXmlDoc.Save(writer);

            //You're never closing the writer, so I would expect it to keep the file open. That will stop future attempts to open the file

            writer.Close();
        }
        else
        {
            Response.ContentType = "text/html";
            Response.Write("<h2> error  accessing web service </h2>");
        }
    }

    public static XmlDocument MakeRequest(string requestUrl)
    {
        try
        {
            HttpWebRequest request = WebRequest.Create(requestUrl) as HttpWebRequest;
            //Set time out to 15 seconds
            request.Timeout = 15 * 1000;
            request.KeepAlive = false;
            HttpWebResponse response = request.GetResponse() as HttpWebResponse;
            XmlDocument xmlDoc = new XmlDocument();
            xmlDoc.Load(response.GetResponseStream());
            return (xmlDoc);

        }
        catch (Exception ex)
        {
            return null;
        }
    }
}

Ответы [ 2 ]

1 голос
/ 26 апреля 2020

Вы пытались запросить дословно имя файла, особенно с расширением файла, например: /WeatherServiceForm.aspx

Запрошенный URL: / Home / WeatherServiceForm выглядит как маршрут MVC, но если вы используют .aspx, тогда я ожидаю, что он будет использовать имя файла.

0 голосов
/ 29 апреля 2020

"ASP. NET Базовое веб-приложение -> ASP. NET Веб-приложение (. NET Framework) Я использую Visual Stud ios 2019, и он автоматически генерирует MVC тип кода . "

Указанный выше шаблон корректен.

404 означает ни ресурс на стороне сервера.

щелкните правой кнопкой мыши веб-форму в проекте и выберите« просмотр в браузере ». "запустить указанную c страницу (в данном случае веб-форму).

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