2

Я нахожусь в нём 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 Внутренняя ошибка сервера

ответ

0

Не ясно от вашего вопроса, где вы используете код. Он работает на рабочем столе в качестве исполняемого файла? Или он работает внутри firefox как какой-то элемент activex или что-то подобное?

В любом случае, я предлагаю использовать средство .net tracelog, чтобы получить журнал транзакций и посмотреть файл журнала.

<?xml version="1.0" encoding="UTF-8" ?> 

    <configuration> 
    <system.diagnostics> 
    <trace autoflush="true" /> 

    <sources> 
    <source name="System.Net"> 

    <listeners> 
     <add name="System.Net"/> 
    </listeners> 
    </source> 
    <source name="System.Net.Sockets"> 
    <listeners> 
     <add name="System.Net"/> 
    </listeners> 
    </source> 
    <source name="System.Net.Cache"> 
    <listeners> 
     <add name="System.Net"/> 
    </listeners> 
    </source> 
    </sources> 
    <sharedListeners> 
     <add 
      name="System.Net" 
      type="System.Diagnostics.TextWriterTraceListener" 
      initializeData="System.Net.trace.log" 
     /> 
    </sharedListeners> 
    <switches> 
     <add name="System.Net" value="Verbose" /> 
     <add name="System.Net.Sockets" value="Verbose" />    
     <add name="System.Net.Cache" value="Verbose" /> 
    </switches> 
</system.diagnostics> 
</configuration> 

Если ваше имя приложения app.exe, создайте файл с именем app.exe.config в том же каталоге, что и ех, и поставить выше содержание в нем. Затем запустите приложение и создайте файл журнала.

У этой ссылки должна быть больше информации о получении файлов журнала, если у вас есть проблема.

creating a system.net trace log

Вы можете поставить логфайл на Pastebin после удаления личной информации, как имена хостов, IPAddresses и т.д.

Кроме того, дайте нам фрагмент кода, который воспроизводит проблему. Тогда будет легче помочь.

+0

Код работает на сервере. Это были http-запросы на ресурс. Оказалось, что делегирование учетной записи не было включено, поэтому, поставив NTLM выше Kerberos в свойствах в IIS, вызовы проходят, а также аутентификацию. – spojam

Смежные вопросы