Я нахожусь в нём NTLM, надеюсь, что вы можете помочь определить, что мне не хватает.HttpWebRequest заголовок «keep-alive» выпадает
В конечном итоге я пытаюсь доставлять отчеты SSRS в кадр в браузере, и только изображения в отчетах дают мне много горя. Они не отображаются, если у пользователя нет Firefox и он вводит свои учетные данные 2 раза, сначала для отчета, а затем второй раз для изображений в отчете.
Я использую HttpWebRequest для получения отчетов SSRS.
Я отправляю веб-серверу (IIS 7.5) кэш учетных данных с «NTLM» и действительными учетными данными, чтобы попытаться получить изображения из SSRS после получения потока HTML, чтобы я мог хранить их локально и ссылаться на те, которые позволит пользователям снова и снова повторно вводить учетные данные.
Я вижу в Fiddler, что проблемы с типом 1, 2 и 3 должным образом выполняются во время встряхивания рук NTLM, однако окончательный ответ - 500 внутренних ошибок обслуживания. Текст ответа также указывает на rsStreamNotFound, однако я не вижу информации о том, что это значит, и я думаю, что это вводит в заблуждение относительно того, какова может быть настоящая проблема.
Когда я пользуюсь Firefox, Firefox запрашивает у меня учетные данные сети для отчета, а затем снова для изображений, и он получает возможность вернуть изображения. Мой HttpWebRequest завершился с ошибкой 500 Internal Server Error и rsStreamNotFound.
Единственное различие, которое я вижу в заголовках запросов между запросами Firefox и моими запросами, заключается в том, что свойство «keep-alive» получает отказ от моего программного запроса, и запросы Firefox имеют его там.
Почему мой «keep-alive» отбрасывается?
На данный момент это единственная разница между моим запросом и запросом Firefox, поэтому я хотел бы устранить эту разницу, прежде чем перейти к любому другому выводу.
Я попытался вариации:
req.KeepAlive = true;
req.PreAuthenticate = true;
и этот перл:
var sp = req.ServicePoint;
var prop = sp.GetType().GetProperty("HttpBehaviour", BindingFlags.Instance | BindingFlags.NonPublic);
prop.SetValue(sp, (byte)0, null);
Вот является CredentialCache:
CredentialCache credentialCache = new CredentialCache();
credentialCache.Add(new Uri(path), "NTLM", NetCredentials);
... и "держать-жив" не присутствовать в запросе на мой HttpWebRequest, и у Firefox есть это - почему мой аккаунт?
Update:
Я пробовал:
using (WebClient client = new WebClient()) {
client.DownloadFile(url, filePath);
}
... и я получил 401 Несанкционированное, поэтому я попытался с учетными данными и получить 500 Внутренняя ошибка сервера
Код работает на сервере. Это были http-запросы на ресурс. Оказалось, что делегирование учетной записи не было включено, поэтому, поставив NTLM выше Kerberos в свойствах в IIS, вызовы проходят, а также аутентификацию. – spojam