SSRS, ReportViewer и ASP.NET доступ запрещен - PullRequest
0 голосов
/ 28 апреля 2011

У меня есть приложение 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))

Если я запускаю приложение под своей учетной записью, а затем пытаюсь их запустить под своей учетной записью, это работает.Я могу воспроизвести для них ошибку, переработав пул приложений, под которым работает приложение.Если я сделаю пользователя локальным администратором (как я) на сервере приложений, он будет работать, но, очевидно, я не хочу этого делать.Любые идеи о том, что я делаю не так, а также почему приложение внезапно работает на них после того, как я его запускаю один раз?

1 Ответ

1 голос
/ 28 апреля 2011

Обнаружена проблема с доступом к файлу machine.config на сервере приложений.Поскольку я работаю с олицетворением и встроенной аутентификацией в IIS, приложение работало как вошедший в систему пользователь.Очевидно, при получении NetworkCredentials, machine.config осуществляется доступ.Так как у пользователей не было доступа к machine.config, это не удалось.Я предполагаю, что machine.config кешируется, поэтому он работал после того, как я запустил приложение от себя (администратора).Я пошел дальше и дал своим пользователям доступ на чтение к machine.config, и это решило проблему.Не уверен, что есть лучший способ сделать это.

...