Не удалось подключиться к серверу отчетов. Настройка URL-адреса и пути в ASP.NET?

Я пытаюсь подключиться к Report (файл rdlc) с помощью веб-приложений ASP.NET. Я работаю с VS2010, а Report Server - версия 2008.

У меня есть следующий URL-адрес отчета, который отлично работает:

http://server url/Products/_layouts/ReportServer/RSViewerPage.aspx?rv:RelativeReportUrl=/Products/Dashboards/Product_tool.rdl&Source=Server Url/Products/Dashboards/Forms/AllItems.aspx&DefaultItemOpen=1

Когда я ввожу этот URL-адрес в свой браузер, он сначала запрашивает пароль для имени пользователя. Когда я вхожу в систему, Report отображается просто отлично.

Теперь мне нужно отобразить этот отчет в файле Report Viewer. Итак, я добавил элемент управления Report Viewer на свою страницу aspx. Я настроил для него URL-адреса так:

Report Server:** http://server url/Products/_layouts/ReportServer

Report Path:** /Products/Dashboards/Product_tool.rdl

Я не совсем уверен, что это даже правильно..?

В любом случае, в моем PageLoad у меня есть следующая строка кода:

eportViewer1.ServerReport.ReportServerCredentials = new ReportCredentials("myuser", "mypass");

Класс ReposrtCredentials взят из: http://social.msdn.microsoft.com/Forums/en-US/vsreportcontrols/thread/c65abca7-0fdb-40fb-aabe-718f63377a55/ (от Фила)

Теперь, когда я запускаю свое веб-приложение, я получаю следующую ошибку:

Не удалось подключиться к серверу отчетов. Проверьте информацию о подключении и убедитесь, что сервер отчетов является совместимой версией.

Теперь я не уверен, что URL-адрес, который я указал для Report Viewer, правильный? Или в чем еще может быть проблема.

Любая идея ..?


person w00    schedule 16.01.2013    source источник
comment
путь к отчету всегда является reportserver+ reportpath, поэтому в вашем случае он выглядит как server url/Products/_Layouts/ReportServer/Products/ Dashboards/Product_tool.rdl...&DefaultItemOpen=1.. проверьте правильность этого URL-адреса. Обычно URL-адрес отчета состоит из URL-адреса сервера отчетов + каталога + имени отчета, т. е. сервера url/Products/_layouts/ReportServer/Products/Dashboards/ ReportName   -  person Manish Mishra    schedule 16.01.2013
comment
@ManishMishra Когда я перехожу к: http://server/ReportServer, он отображает Индекс (так он называется?). Так что я в основном просматриваю каталоги с помощью своего веб-браузера. Когда я использую этот URL: http://server/ReportServer/Products/Dashboards/Product_tool.rdl, он все равно показывает мне ту же страницу. Является ли это признаком того, что rdl должен находиться на другом пути?   -  person w00    schedule 16.01.2013
comment
см. @w00, вы можете столкнуться с проблемой аутентификации, если вы хотите отображать отчеты SSRS в веб-приложении asp.net, вам следует рассмотреть возможность реализации интерфейса IReportServerConnection2; ждите моего решения, как использовать этот интерфейс   -  person Manish Mishra    schedule 16.01.2013


Ответы (2)


При настройке средства просмотра отчетов проверьте, есть ли у используемой вами учетной записи разрешение на просмотр отчета, поскольку необходимо, чтобы у вас был доступ при использовании отчета сервера. Посмотрите и эту ссылку. Они будут полезны: http://forums.asp.net/t/1562624.aspx /1

person Srinivas    schedule 16.01.2013
comment
Спасибо, часть импорта для меня заключалась в том, что мне нужно было использовать полный URL-адрес моего файла RDL. - person w00; 16.01.2013

Чтобы интегрировать отчеты SSRS в приложение ASP.NET, выполните следующие действия.

Во-первых, реализуйте интерфейс IReportServerConnection2. Я сделал что-то вроде этого:

  public sealed class CustomReportServerConnection : IReportServerConnection2
    {
        public WindowsIdentity ImpersonationUser
        {
            get
            {
                // Use the default Windows user.  Credentials will be
                // provided by the NetworkCredentials property.
                return null;
            }
        }
        public ICredentials NetworkCredentials
        {
            get
            {
                // Read the user information from the web.config file.  
                // By reading the information on demand instead of 
                // storing it, the credentials will not be stored in 
                // session, reducing the vulnerable surface area to the
                // web.config file, which can be secured with an ACL.

                // User name
                string userName = ConfigurationManager.AppSettings[Utility.Constants.AppConst.REPORT_USER].ToString(); 

                if (string.IsNullOrEmpty(userName))
                    throw new Exception(Utility.Constants.AppConst.MESSAGE_MISSING_USER_NAME);

                // Password
                string password = ConfigurationManager.AppSettings[Utility.Constants.AppConst.REPORT_PASSWORD].ToString();

                if (string.IsNullOrEmpty(password))
                    throw new Exception(Utility.Constants.AppConst.MESSAGE_MISSING_PWD);

                // Domain
                string domain = ConfigurationManager.AppSettings[Utility.Constants.AppConst.REPORTS_DOMAIN].ToString();

                if (string.IsNullOrEmpty(domain))
                    throw new Exception(Utility.Constants.AppConst.MESSAGE_MISSING_DOMAIN);

                return new NetworkCredential(userName, password, domain);
            }
        }
        public bool GetFormsCredentials(out Cookie authCookie, out string userName, out string password, out string authority)
        {
            authCookie = null;
            userName = null;
            password = null;
            authority = null;
            // Not using form credentials
            return false;
        }
        public Uri ReportServerUrl
        {
            get
            {
                string url = ConfigurationManager.AppSettings[Utility.Constants.AppConst.REPORT_SERVER_URL].ToString();

                if (string.IsNullOrEmpty(url))
                    throw new Exception(Utility.Constants.AppConst.MESSAGE_MISSING_URL);

                return new Uri(url);
            }
        }
        public int Timeout
        {
            get
            {
                return int.Parse(ConfigurationManager.AppSettings[Utility.Constants.AppConst.REPORT_SERVER_TIME_OUT].ToString());
                // return 60000; // 60 seconds
            }
        }
        public IEnumerable<Cookie> Cookies
        {
            get
            {
                // No custom cookies
                return null;
            }
        }
        public IEnumerable<string> Headers
        {
            get
            {
                // No custom headers
                return null;
            }
        }
    }

Теперь в вашей конфигурации AppSettings поместите следующие ключи (или укажите эти значения из любого места):

    <add key="ReportServerUrl" value="http://sqlServerURL/ReportServer_SQL2008R2"/>

    <!--Development TargetReportFolder-->
    <add key="TargetReportFolder" value="/AppReporting/"/>
    <add key="ReportServerTimeOut" value="600000"/>
    <add key="ReportViewerServerConnection" value="FullyQualified Name of ur CustomReportServerConnection,ProjectName"/>
    <add key="ReportsUser" value="ReportUser"/>
    <add key="ReportsPassword" value="reportPassword"/>
    <add key="ReportsDomain" value="myDomain"/>

Теперь на странице .aspx перетащите ReportViewer примерно так:

<rsweb:ReportViewer ID="RptViewer" runat="server" AsyncRendering="False" SizeToReportContent="true"
            ProcessingMode="Remote" Width="100%" BackColor="#F7F8F9" OnReportError="RptViewer_ReportError"
            OnReportRefresh="RptViewer_ReportRefresh1" Height="">
        </rsweb:ReportViewer>

и настройте свой ReportViewer в codeBehind.. правильно разместите ReportParameter.

это должно дать вам представление ...

Дело в том, что вам нужно правильно аутентифицироваться, поэтому напишите свой собственный ReportServerConnection

person Manish Mishra    schedule 16.01.2013
comment
Спасибо, аутентификация на самом деле не была проблемой. Я получил эту ошибку из-за неправильного пути отчета. Я нашел правильные URL-адреса, и теперь они работают. Я использую полный URL-адрес файла rdl. - person w00; 16.01.2013
comment
Спасибо w00, очень полезный комментарий, он наконец-то поставил меня на правильный путь. - person AGuyCalledGerald; 20.11.2013
comment
@ w00 - Как найти правильный путь к отчету? В настоящее время я использую это: mardom-sql-srv01/Reports/ Страниц/ - person ovatsug25; 05.08.2016