SSRS и ASP.net ReportViewer rsAccessDenied

У меня есть отчет SSRS 2008 R2, работающий на сервере отчетов. Когда я открываю отчет с помощью диспетчера отчетов или URL-адреса веб-службы, он работает нормально.

http://mycomputer/ReportServer

и

http://mycomputer/Reports

Когда я добавляю ReportViewer на веб-сайт WebForms и указываю его на

http://mycomputer/reportserver 

с указанием пути к моему отчету это дает мне ошибку отказа в доступе при запуске веб-сайта с использованием веб-сервера VS.net.

Разрешения, предоставленные пользователю mycomputer \ myusername, недостаточны для выполнения этой операции. (rsAccessDenied)

Ниже приведен точный код, который я использую на странице aspx.

<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
<rsweb:ReportViewer ID="ReportViewer1" runat="server" ProcessingMode="Remote" Font-Names="Verdana"
    Font-Size="8pt" InteractiveDeviceInfos="(Collection)" WaitMessageFont-Names="Verdana"
    WaitMessageFont-Size="14pt" Width="712px">
    <ServerReport ReportPath="/MyReports" ReportServerUrl="http://mycomputer/reportserver" />
</rsweb:ReportViewer>

mycomputer \ myusername является администратором на машине. Я также добавил его как администратор в ReportManager.

Я запускаю его в IE в режиме администратора.

Что еще могло вызвать проблемы с отказом в доступе?

Я читал, что у других людей есть проблемы, но большинство из них не для 2008R2, поэтому я не мог понять, как попробовать то, что они сделали. Нет IIS для настройки и нет IUSR для предоставления доступа к отчетам.

Журналы SSRS просто показывают то же сообщение об ошибке без какой-либо другой информации.


person dtc    schedule 02.10.2012    source источник


Ответы (1)


Создание класса экземпляра, реализующего IReportServerCredentials, должно решить проблему. Добавьте следующий класс и назовите его следующим образом:

ReportViewer1.ServerReport.ReportServerCredentials = new ReportServerCredentials("username", "pwd", "domain");

/// <summary>
/// Local implementation of IReportServerCredentials
/// </summary>
public class ReportServerCredentials : IReportServerCredentials
{
    private string _userName;
    private string _password;
    private string _domain;

    public ReportServerCredentials(string userName, string password, string domain)
    {
        _userName = userName;
        _password = password;
        _domain = domain;
    }

    public WindowsIdentity ImpersonationUser
    {
        get
        {
            // Use default identity.
            return null;
        }
    }

    public ICredentials NetworkCredentials
    {
        get
        {
            // Use default identity.
            return new NetworkCredential(_userName, _password, _domain);
        }
    }

    public bool GetFormsCredentials(out Cookie authCookie, out string user, out string password, out string authority)
    {
        // Do not use forms credentials to authenticate.
        authCookie = null;
        user = password = authority = null;
        return false;
    }
}

Спасибо Филу Клюзу: ссылка

person Adam Marshall    schedule 02.10.2012
comment
моя ошибка, если вы используете ReportExecutionService, вы можете просто использовать NetworkCredential, обновив ответ - person Adam Marshall; 03.10.2012