У меня есть приложение ASP.NET, на котором есть элемент управления ReportViewer:
<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))
Если я запускаю приложение под своей учетной записью, а затем пытаюсь их запустить под своей учетной записью, это работает.Я могу воспроизвести для них ошибку, переработав пул приложений, под которым работает приложение.Если я сделаю пользователя локальным администратором (как я) на сервере приложений, он будет работать, но, очевидно, я не хочу этого делать.Любые идеи о том, что я делаю не так, а также почему приложение внезапно работает на них после того, как я его запускаю один раз?