Ответ WebException не вернул полный ответ

Я использую WebClient в своей службе веб-API (Windows Autheticated), чтобы сделать HTTP-вызов в наш корпоративный каталог (Windows Autheticated), чтобы получить профиль для пользователя. Пожалуйста, смотрите ниже.

public string DownloadPage(string ntid)
    {
        var result = "";

        try
        {
            using (var client = new WebClient() {UseDefaultCredentials = true})
            {
                using (var stream = client.OpenRead($"{url}{urlParameter}{ntid}"))
                {
                    using (var reader = new StreamReader(stream))
                    {
                        result = reader.ReadToEnd();
                    }
                }
            }
        }
        catch (Exception ex)
        {
            log.Error(ex); 
        }

        log.Info(result);
        return result;
    }

Код прекрасно работает локально и в нашей среде тестирования, но при развертывании его в среде Produciton выдает "500 внутренних ошибок сервера". Я решил ошибку 500 на основе решения из 500 внутренних ошибок сервера в GetResponse (). Пожалуйста, смотрите коды ниже. Однако я обнаружил, что вернулась только часть профиля (в html). Есть ли что-то еще, например, длина тела или максимальный размер возвращаемого значения, которые мне нужно установить?

 public string DownloadPage(string ntid)
    {
        var result = "";

        try
        {
            using (var client = new WebClient() {UseDefaultCredentials = true})
            {
                using (var stream = client.OpenRead($"{url}{urlParameter}{ntid}"))
                {
                    using (var reader = new StreamReader(stream))
                    {
                        result = reader.ReadToEnd();
                    }
                }
            }
        }
        catch (WebException webex)
        {
            //https://stackru.com/questions/4098945/500-internal-server-error-at-getresponse
            var errResp = webex.Response;
            using (var stream = errResp.GetResponseStream())
            {
                using (var reader = new StreamReader(stream))
                {
                    result = reader.ReadToEnd();
                }
            }
        }
        catch (Exception ex)
        {
            log.Error(ex); 
        }

        log.Info(result);
        return result;
    }

0 ответов

Я думаю, что у вас есть доступ к активному каталогу, поэтому код работает на локальном, а на IIS пул приложений запускается из ApplicationPoolIdentity, который не имеет доступа.

Перейдите в пул приложений и измените личность своей учетной записи. Вот изображение для вашей справки:

Другие вопросы по тегам