У меня SSRS (стандарт 2008, а не R2), поэтому я использую ReportExecution2005.asmx и ReportService2005.asmx для их запуска.
Мы разработали приложение, которое может подключаться к SSRS через веб-сервис. Это хорошо работало на нашем тестовом сервере, но теперь я пытаюсь настроить новый сервер на виртуальной машине, и ни в коем случае, каждый раз, когда приложение пытается подключиться к веб-службе SSRS, я получаю 401 несанкционированный доступ.
это очень странно, потому что, если я только помещаю URL-адрес .asmx в firefox на клиентской рабочей станции, он запрашивает у меня имя пользователя-пароль, я ввожу его и получаю определение wsdl, поэтому я считаю, что доступ правильный.
Вот мой код:
public ReportGateway()
{
_rs = new ReportingService2005 { Credentials = new NetworkCredential(ConfigurationManager.AppSettings["ReportGatewayUser"], ConfigurationManager.AppSettings["ReportGatewayPassword"]) };
_rs.Url = "http://MyMachine:80/ReportServer/ReportService2005.asmx";//?? I saw when I was debugging that it wasn't reading the value in the app.config, but keeping the url of the reference when I created it, so for my test of the moment, I hard-setted it
_rsExec = new ReportExecution2005.ReportExecutionService { Credentials = new NetworkCredential(ConfigurationManager.AppSettings["ReportGatewayUser"], ConfigurationManager.AppSettings["ReportGatewayPassword"]) };
_rsExec.Url = "http://MyMachine:80/ReportServer/ReportExecution2005.asmx";//Same
GenerateReportList();
}
[MethodImpl(MethodImplOptions.Synchronized)]
private void GenerateReportList()
{
try
{
Dictionary<String, SRSSReport> reports = new Dictionary<String, SRSSReport>();
foreach (var children in _rs.ListChildren("/", true))
{
if (children.Type == ItemTypeEnum.Report)
{
SRSSReport report = new SRSSReport {Name = children.Name, Path = children.Path};
ReportParameter[] parameters = _rs.GetReportParameters(children.Path, null, false, null, null);
foreach (ReportParameter parameter in parameters)
report.Parameters.Add(new SRSSReportParameter {Name = parameter.Name, Type = _typeConverstion[parameter.Type]});
reports.Add(report.Path, report);
}
}
lock (_lockObject)
{
_reports = reports;
}
}catch(Exception ex)
{
_reports = new Dictionary<string, SRSSReport>();
Logger.Instance.Error("Error when contacting the reporting server", ex);
}
}
Пока я в полном отчаянии, я искал решение в течение нескольких дней и не знаю, что я мог сделать неправильно.
У вас есть идея / решение / ... помочь мне?
Большое спасибо, любая помощь будет очень признательна.