EasyHero Ответов: 0

HTTP-запрос с getasync не работает после того, как я опубликовать, но работает на localhost


Привет,

Я получаю RSS-каналы с URL-адреса с помощью HTTPClient, после того как все коды написаны и я тестирую на localhost, RSS-каналы извлекаются, но после публикации на сервере я получаю эту ошибку.

One or more errors occurred. at System.Threading.Tasks.Task.ThrowIfExceptional(Boolean includeTaskCanceledExceptions) at System.Threading.Tasks.Task`1.GetResultCore(Boolean waitCompletionNotification) at System.Threading.Tasks.Task`1.get_Result() at dayrunnerapp.Controllers.HomeController.callRss(String url)


Вот что я попробовал сделать.

Что я уже пробовал:

это представление контроллера
public ActionResult News()
        {
            try
            {
                var url = "http://www.inboundlogistics.com/cms/rss-feed";
                
                string html = string.Empty;

                html = callRss(url);
                
                XDocument xml = XDocument.Parse(html);
                var RSSFeedData = (from x in xml.Descendants("item")
                                   select new FeedObjects
                                   {
                                       Title = ((string)x.Element("title")),
                                       Link = ((string)x.Element("link")),
                                       test = ((string)x.Element("description").Value),
                                       Description = ((string)x.Element("description").Value.Replace("/cms//", "http://").Replace(")", "")),
                                       Date = ((string)x.Element("pubDate"))
                                   });
                ViewBag.RSSFeed = RSSFeedData;
                ViewBag.URL = url;
            }
            catch (Exception e)
            {
                ViewBag.Error = e.Message+"\n\r"+e.StackTrace;
                Console.WriteLine(e.Message);
            }
            return View();
        }


это функция callRss
[HttpGet, AllowCrossSiteJson]
       private string callRss(string url)
       {
           string html = String.Empty;

           cli = new HttpClient();
           cli.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/xml"));
           cli.Timeout = TimeSpan.FromMilliseconds(100000);
           try
           {
               HttpResponseMessage result = cli.GetAsync(url).Result;
               html = Encoding.UTF8.GetString(result.Content.ReadAsByteArrayAsync().Result);
           }
           catch (Exception ex)
           {
               html = ex.Message +"\n\r"+ ex.StackTrace;
           }

           return html;
       }


Это прекрасно работает на localhost, ничего не меняя, я публикую и развертываю, но получаю вышеупомянутую ошибку, когда запускаю URL-адрес на сервере. Пожалуйста, что я еще не принял во внимание?

Richard Deeming

Вам нужно будет изучить исключение, чтобы выяснить, что такое "одна или несколько ошибок".

Я был бы склонен начать с правильного написания вашего кода async, и перестать глотать исключения:

private async Task<string> callRss(string url)
{
    var cli = new HttpClient();
    cli.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/xml"));
    cli.Timeout = TimeSpan.FromMilliseconds(100000);
    HttpResponseMessage result = await cli.GetAsync(url);
    result.EnsureSuccessStatusCode();
    return await result.Content.ReadAsStringAsync();
}

public async Task<ActionResult> News()
{
    const string url = "http://www.inboundlogistics.com/cms/rss-feed";
    string html = await callRss(url);
    ...
}

EasyHero

Вот ошибка после обновления моего кода, как вы предложили "произошла ошибка при отправке запроса. Невозможно подключиться к удаленному серверу попытка подключения не удалась из-за того, что подключенная сторона не ответила должным образом через определенный промежуток времени, или не удалось установить соединение из-за того, что подключенный хост не ответил 23.38.53.172:80 в System.Runtime.Услуги компиляторов.TaskAwaiter.ThrowForNonSuccess(задача задачи)"

Richard Deeming

Похоже на ошибку DNS на вашем сервере. Этот IP-адрес, по-видимому, относится к a23-38-53-172.deploy.static.akamaitechnologies.com, а не домен, который вы пытаетесь загрузить.

Jason Gleim

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

EDIT: я полностью пропустил недостающее ожидание! Что он тоже сказал ^^^^ :-)

EasyHero

Да, я открыл url-адрес в браузере, и он возвращает xml-файл, как и ожидалось

0 Ответов