У меня есть отчет Reportviewer с дополнительным отчетом. При локальном запуске отчет работает нормально, когда я развертываю на другом сервере и получаю ошибку отказа в доступе SQL для локального пользователя на удаленном компьютере. например
доступ запрещен для servername \ servername $
У меня такое чувство, что это связано с тем, что я запустил команду SQL для получения данных, необходимых для вспомогательного отчета, и при развертывании на сервере средство просмотра отчетов запускает эту команду, и потому что все мои строки подключения используют встроенную безопасность (по соображениям безопасности ) тогда он не получил правильного контекста олицетворения.
Мой класс доступа к базе данных находится в другой сборке, чем сборка отчетов, на обе эти сборки ссылается веб-приложение.
Похоже, что средство просмотра отчетов вызывает событие обработки подотчета, когда ему нужно получить данные для подотчета. Веб-приложение олицетворяет пользователя при запуске, но событие обработки подотчета не использует этого указанного пользователя. Вместо этого, возможно, вместо этого используется локальная системная учетная запись, и поскольку строки подключения используют интегрированную безопасность, локальная системная учетная запись не имеет доступа к базе данных, которая находится на другом сервере.
У кого-то еще есть такая проблема?
вот код для моей страницы отчета
/// <summary>
/// Page Load
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void Page_Load( object sender, EventArgs e )
{
try
{
if ( !Page.IsPostBack )
{
Reporting.Common.SetReportEmbeddedResource( this.ReportViewer1, "xxx.Web.WAP.Reporting.Reports.ApprovalRouteHeader.rdlc" );
this.ReportViewer1.LocalReport.DataSources.Add(
new Microsoft.Reporting.WebForms.ReportDataSource(
"CostDept",
Reporting.Repositories.ApprovalRoute.GetHeaderApprovalRouteList() ) );
this.ReportViewer1.ProcessingMode = Microsoft.Reporting.WebForms.ProcessingMode.Local;
this.ReportViewer1.LocalReport.SubreportProcessing += new Microsoft.Reporting.WebForms.SubreportProcessingEventHandler( LocalReport_SubreportProcessing );
this.ReportViewer1.LocalReport.Refresh();
}
}
catch ( Exception ex )
{
ErrorLogging.LogError( ex );
}
}
/// <summary>
/// Loads the sub report
/// </summary>
/// <param name="sender">object</param>
/// <param name="e">args</param>
protected void LocalReport_SubreportProcessing( object sender, Microsoft.Reporting.WebForms.SubreportProcessingEventArgs e )
{
try
{
e.DataSources.Add(
new Microsoft.Reporting.WebForms.ReportDataSource(
"CostDept",
Reporting.Repositories.ApprovalRoute.GetDetailApprovalRouteList(
Convert.ToInt32( e.Parameters[ "AccountNumberID" ].Values[ 0 ] ),
Convert.ToInt32( e.Parameters[ "SageDatabaseID" ].Values[ 0 ] ),
Convert.ToInt32( e.Parameters[ "RequestingUserID" ].Values[ 0 ] ),
Convert.ToInt32( e.Parameters[ "ProjectID" ].Values[ 0 ] ),
Convert.ToInt32( e.Parameters[ "ProjectItemID" ].Values[ 0 ] ),
e.Parameters[ "DocumentType" ].Values[ 0 ].ToString() ) ) );
}
catch ( Exception ex )
{
ErrorLogging.LogError( ex );
}
}