【发布时间】:2011-04-27 22:54:11
【问题描述】:
我有一个带有 ReportViewer 控件的 ASP.NET 应用程序:
<rsweb:ReportViewer ID="rv" runat="server" ProcessingMode="Remote"
ShowParameterPrompts="False"AsyncRendering="true" >
<ServerReport ReportPath="<My Report>" ReportServerUrl="<Report Server URL>" />
</rsweb:ReportViewer>
报告服务器运行在与我的应用服务器不同的服务器上,因此我在调用报告时传递了凭据:
rv.ServerReport.ReportServerCredentials = New ReportCredentials()
rv.ServerReport.SetParameters(params)
rv.ServerReport.Refresh()
凭证在这个类中:
<Serializable()> _
Public Class ReportCredentials
Implements Microsoft.Reporting.WebForms.IReportServerCredentials
Public Function GetFormsCredentials(ByRef authCookie As System.Net.Cookie, ByRef userName As String, ByRef password As String, ByRef authority As String) As Boolean Implements Microsoft.Reporting.WebForms.IReportServerCredentials.GetFormsCredentials
authCookie = Nothing
userName = Nothing
password = Nothing
authority = Nothing
Return False
End Function
Public ReadOnly Property ImpersonationUser() As System.Security.Principal.WindowsIdentity Implements Microsoft.Reporting.WebForms.IReportServerCredentials.ImpersonationUser
Get
Return Nothing
End Get
End Property
Public ReadOnly Property NetworkCredentials() As System.Net.ICredentials Implements Microsoft.Reporting.WebForms.IReportServerCredentials.NetworkCredentials
Get
Return New NetworkCredential(AppSettings("ReportUser"), Helpers.GetReportPassword(), AppSettings("ReportDomain"))
End Get
End Property
结束类
在我的 web.config 文件中,我有 impersonate="true"。
我遇到的问题是大多数用户都会收到此错误:
Access is denied. (Exception from HRESULT: 0x80070005 (E_ACCESSDENIED))
如果我在我的帐户下运行应用程序,然后让他们在他们的帐户下尝试,它就可以工作。我可以通过回收应用程序正在运行的应用程序池来为他们重现错误。如果我让用户成为应用服务器上的本地管理员(就像我一样),那么它将起作用,但显然我不想这样做。关于我做错了什么以及为什么应用程序在我运行一次后突然为他们工作的任何想法?
【问题讨论】:
标签: asp.net reporting-services reportviewer reportingservices-2005