2013-03-20 2 views
1

(Пожалуйста, обратите внимание, что это не первый запуск только проблема, это происходит каждый раз)генерирующая SSRS 2008 отчет R2 в C# с удаленного ПК работает медленнее, чем от локального ПК

Я хотел бы, если кто-нибудь знает натолкнулся на следующее.

Мы создали приложение C#, которое генерирует отчеты из экземпляра SSRS.

Когда я запускаю это приложение на сервере, где находится экземпляр SSRS, отчет генерируется в + - 6 секунд.

Когда я запускаю то же приложение из удаленного ящика (тот же самый новый, только другой компьютер в экземпляр SSRS), тот же отчет занимает + - 18 секунд.

код используется что-то вроде

ServerReport report = new ServerReport(); 
report.ReportServerUrl = new System.Uri(reportSetup.ConnectionString); 
report.ReportServerCredentials.NetworkCredentials = System.Net.CredentialCache.DefaultCredentials; 
report.ReportPath = reportName; 
report.SetParameters(reportParams); 
byte[] bytes = report.Render("PDF", null, out mimeType, out encoding, out extension, out streamids, out warnings); 

где ServerReport от Microsoft.Reporting.WinForms из C:\Program Files (x86)\Microsoft Visual Studio 10.0\ReportViewer\Microsoft.ReportViewer.WinForms.dll (но и попытался веб-версии), а остальное объявляется

Warning[] warnings; 
string[] streamids; 
string mimeType; 
string encoding; 
string extension; 
List<ReportParameter> reportParams 

и reportSetup.ConnectionString имеет вид http://<server name>/ReportServer (здесь имя сервера - это фактическое имя, но я тоже пробовал с IP-адресом).

Я приурочен к каждому из шагов выше, anf обнаружил, что виновник находится на линии, где он устанавливает параметры. Поэтому я сохранил значения параметров в значениях по умолчанию в фактическом отчете и удалил этот шаг. Тогда рендеринг просто занял больше времени, чем предыдущий.

В дополнение к этому я также попытался изменить учетную запись Reporting Service Configuration Manager Service от сети к локальной учетной записи, и игрался с настройками аутентификации в конфигурационном файле (RSReportServer.config), найденных в C:\Program Files\Microsoft SQL Server\MSRS10_50.MSSQLSERVER\Reporting Services\ReportServer

Первоначально параметры проверки подлинности был

<Authentication> 
    <AuthenticationTypes> 
     <RSWindowsNegotiate/> 
     <RSWindowsNTLM/> 
    </AuthenticationTypes> 
    <RSWindowsExtendedProtectionLevel>Off</RSWindowsExtendedProtectionLevel> 
    <RSWindowsExtendedProtectionScenario>Proxy</RSWindowsExtendedProtectionScenario> 
    <EnableAuthPersistence>true</EnableAuthPersistence> 
</Authentication> 

Я удалил строку <RSWindowsNegotiate/> как я прочитал от Authentication Types in Reporting Services

RSWindowsNegotiate

RSWindowsNegotiate направляет сервер отчетов для обработки аутентификации запросов, задающих переговоры. Сначала проведите проверку подлинности Kerberos , но вернемся к NTLM, если Active Directory не может предоставить билет для запроса клиента серверу отчетов. Negotiate вернется только к NTLM, если билет недоступен. Если первая попытка приводит к ошибке, а не отсутствующему биту, сервер отчетов не выполняет вторую попытку.

но это не помогло.

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

ответ

0

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

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

  1. Создайте файл PowerShell со следующим содержимым в папку сценария:

    $ туалет = New-Object system.net.webClient $ имя пользователя = 'ReportAdmin' $ пароль = «ReportAdmin ' $ креди = New-Object System.Management.Automation.PSCredential -ArgumentList @ ($ имя пользователя (ConvertTo-SecureString -String $ пароль -AsPlainText -Force))

    $wc.Credentials = $cred 
    $src = $wc.DownloadString(“http://<SSRSSERVERNAME>/SSRS/Pages/Folder.aspx”) 
    
  2. Создайте пакетный файл в папке скрипта с таким содержимым:

-command "PowerShell & 'C: \\ SRSWakeup.ps1'"

  1. Создать работа, которая работает каждый час и сохраняет ssrs в живых. Вы можете сделать это, чтобы сохранить и импортировать этот контент в диспетчере задач Windows: (Это будет вызывать .CMD для вызова команды оболочки питания, чтобы сохранить SSRS живой

    <?xml version="1.0" encoding="UTF-16"?> <Task version="1.2" 
        xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task"> 
    <RegistrationInfo> 
         <Date>2012-10-29T17:57:58.8640417</Date> 
         <Author>SERVER\AdminAccount</Author> 
        <Description>Wakes up Reporting services when the service shuts down</Description> </RegistrationInfo> <Triggers> 
         <CalendarTrigger> 
         <Repetition> 
          <Interval>PT1H</Interval> 
          <StopAtDurationEnd>false</StopAtDurationEnd> 
         </Repetition> 
         <StartBoundary>2012-11-01T21:06:52.4488088</StartBoundary> 
         <Enabled>true</Enabled> 
         <ScheduleByDay> 
          <DaysInterval>1</DaysInterval> 
         </ScheduleByDay> 
        </CalendarTrigger> </Triggers> <Principals> 
         <Principal id="Author"> 
         <UserId>SERVER\AdminUser</UserId> 
         <LogonType>Password</LogonType> 
         <RunLevel>LeastPrivilege</RunLevel> 
         </Principal> </Principals> <Settings> 
         <MultipleInstancesPolicy>IgnoreNew</MultipleInstancesPolicy> 
         <DisallowStartIfOnBatteries>false</DisallowStartIfOnBatteries> 
         <StopIfGoingOnBatteries>false</StopIfGoingOnBatteries> 
         <AllowHardTerminate>true</AllowHardTerminate> 
         <StartWhenAvailable>true</StartWhenAvailable> 
         <RunOnlyIfNetworkAvailable>false</RunOnlyIfNetworkAvailable> 
         <IdleSettings> 
         <StopOnIdleEnd>true</StopOnIdleEnd> 
         <RestartOnIdle>false</RestartOnIdle> 
         </IdleSettings> 
        <AllowStartOnDemand>true</AllowStartOnDemand> 
         <Enabled>true</Enabled> 
         <Hidden>false</Hidden> 
         <RunOnlyIfIdle>false</RunOnlyIfIdle> 
         <WakeToRun>false</WakeToRun> 
         <ExecutionTimeLimit>P3D</ExecutionTimeLimit> 
         <Priority>7</Priority> </Settings> <Actions Context="Author"> 
         <Exec> 
         <Command>C:\<ScriptFolder\wakeup.cmd</Command> 
         </Exec> </Actions> </Task> 
    
+0

Большое спасибо за усилия. , но по мере того, как первая строка читается ** (Обратите внимание, что это не первый запуск, это происходит каждый раз) ** –

Смежные вопросы