WinForms ReportViewer: замедлите начальный рендеринг

У вас есть как минимум три проблемы:

  1. - это устаревший элемент конфигурации, который не связан с elytron;

  2. [1129 ] Вы полностью пропустили конфигурацию безопасности ejb3;

  3. Ваш метод EJB не защищен с помощью @RolesAllowed(...).

Я получил похожий пример работы:

  1. Создайте элитронную область свойств:

    /subsystem=elytron/properties-realm=DemoPropsRealm:add(groups-attribute=groups,\
       groups-properties={\
         path=demo-roles.properties,relative-to=jboss.server.config.dir},\
       users-properties={\
         path=demo-users.properties,relative-to=jboss.server.config.dir,plain-text=true})
    
  2. [ 1133] Создайте домен безопасности elytron:

    /subsystem=elytron/security-domain=DemoDomain:add(\
       realms=[{realm=DemoPropsRealm,role-decoder=groups-to-roles}],\
       default-realm=DemoPropsRealm,permission-mapper=default-permission-mapper)
    
  3. Создайте фабрику http-аутентификации elytron , которая сопоставлена ​​с нашим DemoDomain: [ 1134]

    /subsystem=elytron/http-authentication-factory=demo-http-auth:add(\
       http-server-mechanism-factory=global,\
       security-domain=DemoDomain,\
       mechanism-configurations=[{\
         mechanism-name=BASIC,\
         mechanism-realm-configurations=[{\
           realm-name=DemoApplicationDomain\
         }]\
       }])
    
  4. Сопоставить домен безопасности приложения ejb3 с нашим DemoDomain

    /subsystem=ejb3/application-security-domain=\
        DemoApplicationDomain:add(security-domain=DemoDomain)
    
  5. Ссылка undertow домен безопасности приложения подсистемы для нашей фабрики http-authentication:

    /subsystem=undertow/application-security-domain=\
        DemoApplicationDomain:add(http-authentication-factory=demo-http-auth)
    

    «DemoApplicationDomain» будет именем области в элементе login-config файла web.xml и security-domain в файл jboss-web.xml.

  6. Объявите разрешенные роли в вашем методе EJB:

    @RolesAllowed("Admin")
    public void printText(String text) {
        System.out.println(text + ":: EJBContext: " + context.getCallerPrincipal().getName()
         + "  SessionContext: " + ctx.getCallerPrincipal().getName());      
    }
    

Пример источника находится в GitHub по адресу jax-rs-basic-auth . [+1139]

6
задан Bryan Roth 4 February 2010 в 20:01
поделиться

10 ответов

Размышление выход из поля: сервер отчета на другой машине к той запускающий приложение? Сеть могла занимать много времени для разрешения "reportServerURL". После того, как разрешенный имя кэшировалось бы, и следовательно последующие вызовы будут более быстрыми..

У меня была эта проблема прежде с плохо настроенными серверами DNS. Попытайтесь заменить "reportServerUrl" "reportServerIPAddress" и посмотрите, немного ли начальный вызов ReportViewer быстрее.

2
ответ дан 8 December 2019 в 12:23
поделиться

В сводке различных идей, уже представленных, это могло быть

  • время запуска для инфраструктуры средства просмотра отчета на клиенте
  • время загрузки кэша на клиенте
  • время выполнения запросов в сервере
  • отчет, представляющий время в сервере

Попытайтесь выполнить отчет, закрыв клиент, перезапустив клиент и выполнив отчет снова. Если отчет намного быстрее во второй раз, повторите этот эксперимент, но загрузку, запустите и разгрузите другое крупное приложение промежуточные выполнения отчета.

Если второй выполненный отчет продолжает быть намного более быстрым, то различие, которое Вы видите, больше имеет отношение к кэшу ввода-вывода SQL Server, чем, что происходит на клиенте. Можно далее протестировать это путем преднамеренного перемещения кэша MSSQL путем выполнения запроса, который вытягивает много данных из таблиц, которые не используются в отчете.

Все вышеупомянутое интересно, но неважно. Если Вы хотите гарантировать мгновенный ответ отчета, Reporting Services оказывает обширную поддержку для запланированного поколения отчетов, так, чтобы, когда потребитель запрашивает отчет, единственная задержка была сетевой доставкой.

Если Ваши пользователи настаивают на том, чтобы сообщать относительно до минуты (живые) данные, они должны будут или указать более трудные параметры ограничения или привыкнуть к ожиданию.

3
ответ дан 8 December 2019 в 12:23
поделиться

Можно вытянуть отчет в двух режимах, локальных и сервер. Если Вы работаете в локальном режиме, он собирается вытянуть и данные и определение отчета на Вашу машину, затем представить их обоих. В режиме сервера это собирается просто позволить SSRS сделать всю работу, затем задержать информацию для рендеринга.

При использовании локального режима это могла бы быть аппаратная проблема. Если у Вас есть огромный набор данных, это - много данных для хранения в памяти.

Кроме этого, это не много информации для продолжения...

Обновление: так как Вы заметили, что это - только первый вызов, который требует времени, Вы сделали какое-либо профилирование, чтобы определить, сделан ли объем работы на бэкенде вызовы SQL или потрачен в фактическом рендеринге отчета?

Если это быстрее на последующих вызовах, возможно, что Вы (случайно) кэшируетесь на одном уровне или другом. Можно кэшировать отчеты (http://www.sqlservercurry.com/2007/12/configure-report-to-be-cached-ssrs-2005.html), или могло случиться так, что план выполнения для возврата данных кэшируется глубоко в SQL Server.

2
ответ дан 8 December 2019 в 12:23
поделиться

ReportServer всегда требует времени для пробуждения, потому что он работает под IIS. Существует процесс, испытывают таймаут на каждом AppPool. У нас есть та же проблема с нашим средством просмотра отчета приложения ASP.NET. Вы могли попытаться увеличиться, AppPool поддерживают времена в настройках IIS.

Посмотрите здесь:

Я предполагаю, что Вы выполняете SQL2005 SSRS, конечно.

Одна опция состоит в том, чтобы обновить до 2008, где SSRS больше не зависит от IIS.

3
ответ дан 8 December 2019 в 12:23
поделиться

ОБНОВЛЕНИЕ

Я заметил, что только первая загрузка ReportViewer занимает много времени; каждая последующая загрузка тех же или различных отчетов загружается быстро.

1
ответ дан 8 December 2019 в 12:23
поделиться

Вы установлены работать на сервере, что означает потребности сервера SRS сделать рендеринг как таковой в первый раз, когда будет задержка одной или всех следующих причин (они являются самыми медленными из набора, существуют другие, но они более быстры):

  • Разрешение DNS: URL должен быть разрешен к IP-адресу. После того как это сделано, это кэшируется локально, который ускоряет его.
  • Для ASP.NET/IIS нужно время для нагреваний. Существуют все виды компиляции и начальной буквы, загружающейся, который должен произойти - после того, как загружено это останется в памяти серверов, пока Вы не перезапустите IIS, или время уборки по умолчанию происходит.
  • Для создания отчетов о Сервисах нужно время для нагреваний таким же образом, как ASP.NET/IIS делает.

Для тестирования на это использование монитора сети, такого как Netmon (если Вы - поклонник Microsoft) или Wireshark (моя рекомендация) и следят за трафиком с Вашей машины на сервер. Вы будете видеть запрос DNS, затем Запросы HTTP идут, и задержка будет в данных возврата. На втором вызове Вы будете видеть, что скорость весьма отличается в проверках DNS и возврате.

Что Вы могли сделать для предотвращения, это - теплое сценарий - я не знаю один для SRS, но вот ссылка на ту SharePoint, которую не было бы трудно изменить, так как это имеет те же самые проблемы.

1
ответ дан 8 December 2019 в 12:23
поделиться

Кажется, как будто Вы следуете за отчетом о SSRS непосредственно. Можно хотеть поразить веб-сервис SSRS вместо этого. Это может улучшить Вашу производительность.

1
ответ дан 8 December 2019 в 12:23
поделиться

Вот возможное разрешение для Вашей проблемы: Попытайтесь получить доступ к первому отчету от сети прежде, чем получить доступ к любому отчету с приложением.

Если проблема не появляется, Вы могли бы подать заявку, которая "предварительно загрузит" первый отчет, чтобы позволить сообщать, что сервисы делают свой запуск.

Я видел этот вид решения для некоторых демонстрационных приложений от Microsoft. Приложения, где с помощью Analysis Services и Reporting Services.

Удача иначе

0
ответ дан 8 December 2019 в 12:23
поделиться

У меня была такая же проблема.

Я обнаружил, что смена принтера по умолчанию (здесь медленная сеть) решает проблему.

ReportViewer получает некоторую информацию от принтера по умолчанию, , а поскольку сеть здесь очень медленная, у меня была задержка в 10 секунд

Надеюсь, это поможет

2
ответ дан 8 December 2019 в 12:23
поделиться

Я нашел ответ на других форумах. MSDN объясняет, что DLL ищет какой-то веб-сервер Verisign, и это занимает вечность ... есть два способа отключить его: один - установить флажок в Internet Explorer, а другой - добавить несколько строк в приложение. .config файла приложения.

4
ответ дан 8 December 2019 в 12:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: