Метод HttpContentExtensions.ReadAsAsync не найден во время выполнения - PullRequest
0 голосов
/ 14 сентября 2018

Недавно я добавил код в свое приложение для использования webAPI.Это делается с помощью HttpClient.На моей девелоперской машине все работает нормально.Но как только я публикую в веб-приложении Azure (напрямую или через процесс сборки), я получаю ошибку времени выполнения после развертывания приложения.

Это исключение, которое я получаю;enter image description here

Исключение указывает на строку 246. Что эквивалентно этому методу;

public IList<SubscriberDefinition> GetAllSubscribers()
    {
        IList<SubscriberDefinition> allSubscribers = Caching.Get<IList<SubscriberDefinition>>(CacheKeys.ListAllSubscribers);

        if (allSubscribers != null && allSubscribers.Count > 0)
            return allSubscribers;

        try
        {
            SetBearerToken(HttpClient);
            HttpResponseMessage response = HttpClient.GetAsync("api/getallsubscribers").Result;
            if (response.IsSuccessStatusCode)
            {
                allSubscribers = response.Content.ReadAsAsync<IList<SubscriberDefinition>>().Result;

                Caching.Add(CacheKeys.ListAllSubscribers, allSubscribers, ECacheDuration.TwentyFourHours);

                return allSubscribers;
            }
        }
        catch
        {
            return new List<SubscriberDefinition>();
        }
        return new List<SubscriberDefinition>();
    }

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

1 Ответ

0 голосов
/ 18 сентября 2018

После долгих поисков я обнаружил, что проблема была в том, как я использовал async.Большое спасибо @JohnRasch за то, что он подтолкнул меня в правильном направлении!

Я подозреваю, что в одном из множества упомянутых пакетов NuGet и MyGet произошло обновление, в результате которого произошла эта ошибка.Я обновил способ обработки ответа и преобразовал его в нужный мне тип.И это решило проблему.Хотя я до сих пор не до конца понимаю причину этой проблемы, я по крайней мере знаю, как ее исправить.

Для этого конкретного вызова службы / API я смог заставить его работать со следующимиcode;

public IList<SubscriberDefinition> GetAllSubscribers()
    {
        IList<SubscriberDefinition> allSubscribers = Caching.Get<IList<SubscriberDefinition>>(CacheKeys.ListAllSubscribers);

        if (allSubscribers != null && allSubscribers.Count > 0)
            return allSubscribers;

        try
        {
            SetBearerToken(HttpClient);
            HttpResponseMessage response = Task.Run(async () => await HttpClient.GetAsync("api/getallsubscribers")).Result;
            if (response.IsSuccessStatusCode)
            {
                var jsonstring = response.Content.ReadAsStringAsync();
                jsonstring.Wait();

                allSubscribers = JsonConvert.DeserializeObject<IList<SubscriberDefinition>>(jsonstring.Result);

                Caching.Add(CacheKeys.ListAllSubscribers, allSubscribers, ECacheDuration.TwentyFourHours);

                return allSubscribers;
            }
        }
        catch
        {
            return new List<SubscriberDefinition>();
        }
        return new List<SubscriberDefinition>();
    }

В другом сервисе у нас также была эта ошибка, и там мы могли ее исправить, выполнив асинхронную работу полностью.

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