(请注意,这不是第一次运行问题,每次都会发生这种情况)
我想知道是否有人遇到以下情况。
我们创建了一个c#应用程序,用于从SSRS实例生成报告。
当我在SSRS实例所在的服务器上运行此应用程序时,报告会在+ - 6秒内生成。
当我从远程盒子(同一个nework,只是不同的PC到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)。
我为上述每个步骤计时,并且发现罪魁祸首是在它设置参数的行上。因此,我将参数值存储在实际报告的默认值中,并删除了该步骤。然后渲染只需要比以前更长的时间。
除此之外,我还尝试将Reporting Service配置管理器服务帐户从网络更改为本地帐户,并使用C:\Program Files\Microsoft SQL Server\MSRS10_50.MSSQLSERVER\Reporting Services\ReportServer
中找到的配置文件(rsreportserver.config)中的身份验证设置进行操作
最初验证设置为
<Authentication>
<AuthenticationTypes>
<RSWindowsNegotiate/>
<RSWindowsNTLM/>
</AuthenticationTypes>
<RSWindowsExtendedProtectionLevel>Off</RSWindowsExtendedProtectionLevel>
<RSWindowsExtendedProtectionScenario>Proxy</RSWindowsExtendedProtectionScenario>
<EnableAuthPersistence>true</EnableAuthPersistence>
</Authentication>
我在阅读Authentication Types in Reporting Services
时删除了行<RSWindowsNegotiate/>
RSWindowsNegotiate
RSWindowsNegotiate指示报表服务器处理身份验证 指定协商的请求。协商尝试Kerberos 首先进行身份验证,但如果是Active Directory则回退到NTLM 无法将客户端请求的票证授予报表服务器。 如果票证不可用,谈判将只回到NTLM。 如果第一次尝试导致错误而不是丢失票证, 报表服务器不会再次尝试。
但这没有帮助。
是否有人对如何更正代码或SSRS安装有任何想法?我希望应用程序位于与SSRS实例相同的服务器上。
答案 0 :(得分:0)
你可能不幸从睡眠中唤醒了应用程序。出于某种原因,在空闲时间到期后将ssrs重新联机将使您在启动和加载环境的过程中受到惩罚。一旦应用程序重新联机,它就会以可预期的方式处理请求。
如果您可以通过创建每小时任务来轮询资源,那么可以将唤醒从出现问题的图片中解脱出来并使系统更具响应性。
在脚本文件夹中创建包含以下内容的PowerShell文件:
$ wc = New-Object system.net.webClient $ username ='ReportAdmin' $ password ='ReportAdmin' $ cred = New-Object System.Management.Automation.PSCredential -ArgumentList @($ username,(ConvertTo-SecureString -String $ password -AsPlainText -Force))
$wc.Credentials = $cred $src = $wc.DownloadString(“http://<SSRSSERVERNAME>/SSRS/Pages/Folder.aspx”)
使用以下内容在脚本文件夹中创建批处理文件:
powershell -command“&amp;'C:\\ SRSWakeup.ps1'”
创建一个每小时运行一次的作业,让ssrs保持活力。您可以通过将此内容保存并导入到Windows任务管理器中来实现此目的:(它将调用.cmd来调用power shell命令以使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>