我有一个使用域帐户配置应用程序池的Web应用程序。在SSRS中,域帐户被授予浏览器对该文件夹的访问权限,并且SSRS报告配置有适当的凭据。
我的问题是,如果从网络应用程序启动SSRS报告,SSRS报告是否会在域帐户或我的帐户下打开。目前,它提供错误消息,因为\没有足够的权限来访问报告位置。
答案 0 :(得分:3)
您只需在Web配置中设置固定用户以及SSRS地址即可。这样,您可以设置要使用的站点的默认值,而不是取决于运行站点的用户:
来自WPF应用程序的示例,但与后面的代码中的ASP.NET非常相似。
<Button x:Name="btnGetViewerRemoteData" Content="Remote" Click="ReportViewerRemote_Load"/>
后面代码中元素的引用名称,确保为“Microsoft.Reporting.WinForms”(或ASP.NET等效项)导入名称空间。
private void ResetReportViewer(ProcessingMode mode)
{
this.reportViewer.Clear();
this.reportViewer.LocalReport.DataSources.Clear();
this.reportViewer.ProcessingMode = mode;
}
private ICredentials giveuser(string aUser, string aPassword, string aDomain)
{
return new NetworkCredential(aUser, aPassword, aDomain);
}
private void ReportViewerRemoteWithCred_Load(object sender, EventArgs e)
{
ResetReportViewer(ProcessingMode.Remote);
var user = giveuser("User", "Password", "Domain");
reportViewer.ServerReport.ReportServerCredentials.ImpersonationUser = (System.Security.Principal.WindowsIdentity)user;
;
reportViewer.ServerReport.ReportServerUrl = new Uri(@"http:// (server)/ReportServer");
reportViewer.ServerReport.ReportPath = "/Test/ComboTest";
DataSourceCredentials dsCrendtials = new DataSourceCredentials();
dsCrendtials.Name = "DataSource1";
dsCrendtials.UserId = "User";
dsCrendtials.Password = "Password";
reportViewer.ServerReport.SetDataSourceCredentials(new DataSourceCredentials[] { dsCrendtials });
reportViewer.RefreshReport();
}
我对我的示例进行了硬编码,但您可以将服务器,用户和密码放在配置文件中。虽然密码的安全性可能是一个问题,因此取决于您的组织,因此最好先对其进行硬编码或掩盖它。