2016-08-15 2 views
1

У меня есть отчет, который, кажется, работает нормально, но при попытке загрузить его в моем приложении MVC asp.net я получаю 500. Я просто пытаюсь загрузить pdf-версию с помощью доступа к URL. Для этого я следующее:Почему я получаю 500 при попытке загрузить отчет SSRS с использованием доступа к URL?

WebClient client = new WebClient(); 
NetworkCredential nwc = new NetworkCredential(ConfigurationManager.AppSettings["SSRSUserName"], ConfigurationManager.AppSettings["SSRSPassword"]); 
client.Credentials = nwc; 
string paramList = "&OrderId=" + orderId; 

string reportURL = ConfigurationManager.AppSettings["SSRSBaseUrl"] + 
      ConfigurationManager.AppSettings["SSRSReport"] + 
      "&rs:Command=Render&rs:Format=PDF" + 
      paramList; 
try 
{ 
    byte[] reportBytes = client.DownloadData(reportURL); 
} 

Чтобы убедиться, что мой доклад отлично работает, я взял получившуюся строку reportURL, бросил его в браузере, и достаточно уверен, что мой отчет загружен полностью.

Кто-нибудь знает, почему я получаю 500 в своем приложении, но pdf будет отлично загружаться за пределами моего приложения с тем же URL-адресом? Есть ли у них какая-то конфигурация, которую мне не хватает?

версия сервера SQL Server 2016

+1

Два предложения, которые несколько проб и ошибок. Вместо использования строки определите URL как [Uri] (https://msdn.microsoft.com/en-us/library/system.uri (v = vs.110) .aspx) и передайте это в 'DownloadData '. Мне интересно, если внутренне «DownloadData» имеет ожидания относительно кодирования параметров URL и кодировки по умолчанию для «WebClient», это приводит к тому, что URL-адрес становится неверным. Другой - олицетворять браузер, установив пользовательский агент, похожий на: client.Headers.Add (HttpRequestHeader.UserAgent, «Mozilla/4.0 (совместимо; MSIE 6.0; Windows NT 5.1)»); ' –

+0

@JonathonOgden Я попытался переключите мою строку url на uri и не повезло.При попытке олицетворять браузер я получаю пару ошибок компиляции с предоставленной вами строкой. VS говорит: «Неожиданный персонаж». Любая идея, почему это не будет компилироваться? Спасибо – Jon

+0

@JonathonOgden не знаю, что я сделал, но я получил его для компиляции, и он все еще не работает при выдаче себя за браузер. – Jon

ответ

1

Подводя итоги обсуждения и решения, используя учетные данные по умолчанию, установив свойство UseDefaultCredentials = true для WebClient разрешен общий внутренняя ошибка сервера 500.

С момента установки после SQL Server 2008 запросы аутентификации обрабатываются экземпляром служб Reporting Services.

В предыдущих версиях служб Reporting Services IIS поддерживала всю поддержку аутентификации. Начиная с выпуска SQL Server 2008, IIS больше не используется. Службы Reporting Services обрабатывают все запросы аутентификации.

По умолчанию Сервер отчетов использует методы проверки подлинности, основанные на проверке подлинности Windows. Согласование и NTLM, как указано в Authentication with the Report Server.

Поскольку сервер отчетов в этом случае используется один или все из следующих методов проверки подлинности: согласование, NTLM и Kerberos, и это не приложение ASP.NET, учетные данные по умолчанию должны быть использованы, как описано в DefaultCredentials:

Свойство DefaultCredentials применяется только к NTLM, согласованию и проверке на основе Kerberos.

DefaultCredentials представляет системные учетные данные для текущего контекста безопасности , в котором работает приложение. Для клиентского приложения обычно это учетные данные Windows (имя пользователя, пароль и домен) пользователя, запускающего приложение. Для приложений ASP.NET учетными данными по умолчанию являются пользовательские учетные данные пользователя пользователя или пользователя, которому выдают себя за него.

Вот почему вы можете получить доступ к Средству просмотра отчетов по URL-адресу своего браузера, но не в своем приложении.

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