ReportViewer - контекст олицетворения обработки подотчета - PullRequest
0 голосов
/ 18 февраля 2011

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

Ответы [ 2 ]

0 голосов
/ 22 марта 2011

Я столкнулся с подобной ситуацией, импортируя диаграмму в изображение.

Мой график отображался на странице aspx и имел динамические параметры. При работе локально все работало нормально. Развертывание в нашей постановочной коробке ... это сломалось. Те же ошибки, что и в проблеме подотчета, упомянутой здесь.

Я, наконец, только что удалил защиту из рендеринга диаграммы (мы уже использовали UID / PWD для всех соединений с БД).

Так что я думаю, что эта проблема возникает практически с любой «подзадачей» для контроля отчетов. Будь то изображение, подотчеты или что-то еще.

0 голосов
/ 19 февраля 2011

Я думаю, что дошел до сути. Поскольку сервер SQL находится в отдельном блоке, чем веб-приложение, при обработке подотчета возникает «двойной скачок», который теряет контекст идентификации.

Я придумал 2 варианта работы.

1) Используйте UID и PWD в строках соединения sql, поэтому Integrated Security не используется

2) Измените удостоверение пула приложений и доступ анонимного пользователя в IIS к той же учетной записи, которая имеет разрешения для базы данных. Затем при обработке подотчета идентификация пула приложений будет иметь доступ и будет загружена правильно.

Я опубликовал подробное объяснение в своем блоге: WraithNath

...