У меня есть отчет для просмотра отчетов с вложенным отчетом.Локальный запуск отчета работает нормально, когда я развертываю на другом сервере ошибку «Отказано в доступе SQL» для локального пользователя на удаленной машине.например,
доступ запрещен для имя_сервера \ имя_сервера $
У меня такое ощущение, что это из-за того, что я запустил команду 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 );
}
}