サブレポートを含むレポートビューアレポートがあります。ローカルで実行すると、別のサーバーに展開すると、リモート・マシン上のローカル・ユーザーに対してSQLアクセス拒否エラーが発生するため、レポートが正常に動作します。サーバー名\サーバー名のために拒否された例ReportViewer - サブレポート処理のなりすましコンテキスト
アクセス$
私は、これはサブレポートに必要なデータを取得するためにSQLコマンドを発射し、サーバーにデプロイ時にレポートビューアは、この焼成された原因は私にある気持ちを持っています私の接続文字列のすべてが(セキュリティ上の理由から)統合されたセキュリティを使用しているため、正しい偽装コンテキストが得られていません。
私のデータベースアクセスクラスが報告アセンブリとは別のアセンブリであり、これらのアセンブリの両方は、Webアプリケーションから参照されている
それは取得する必要がある場合レポートビューアは、サブレポート処理イベントを呼び出しているようだサブレポートのデータ。 Webアプリケーションは実行時にユーザーを偽装しますが、サブレポート処理イベントはこの指定されたユーザーを使用しません。代わりにローカルシステムアカウントではなく、接続文字列が統合セキュリティを使用しているため、ローカルシステムアカウントは別のサーバー上のデータベースにアクセスできません。
他にもこの問題がありますか?ここ
は私がこれの下に持っていると思う私のレポートページ
/// <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);
}
}