Ответ WebException не вернул полный ответ - PullRequest
0 голосов
/ 17 октября 2018

Я использую 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.Есть ли что-нибудь вроде длины тела или максимального возвращаемого размера, которое мне нужно установить из кода или IIS?

 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)
        {
            ///4073638/500-vnutrennyaya-oshibka-servera-v-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;
    }

1 Ответ

0 голосов
/ 08 января 2019

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

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

...