1

(これは初回実行のみの問題ではないことに注意してください。これは毎回発生します)

誰かが次のことに遭遇したかどうか知りたいです。

SSRSインスタンスからレポートを生成するac#アプリケーションを作成しました。

SSRSインスタンスが存在するサーバーでこのアプリケーションを実行すると、レポートは±6秒で生成されます。

リモートボックスからまったく同じアプリケーションを実行すると(同じネットワーク、SSRSインスタンスとは異なるPC)、同じレポートに±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);

where ServerReportis from Microsoft.Reporting.WinFormsfrom C:\Program Files (x86)\Microsoft Visual Studio 10.0\ReportViewer\Microsoft.ReportViewer.WinForms.dll(ただし、Webバージョンも試しました)そして残りは次のように宣言されます

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サービスアカウントをネットワークからローカルアカウントに変更してみて、次の場所にある構成ファイル(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>

ReportingServicesの認証タイプ<RSWindowsNegotiate/>から読み取った行を削除しました

RSWindowsNegotiate

RSWindowsNegotiateは、Negotiateを指定する認証要求を処理するようにレポートサーバーに指示します。Negotiateは最初にKerberos認証を試みますが、Active Directoryがクライアント要求のチケットをレポートサーバーに付与できない場合は、NTLMにフォールバックします。ネゴシエートは、チケットが利用できない場合にのみNTLMにフォールバックします。最初の試行でチケットが見つからないのではなくエラーが発生した場合、レポートサーバーは2回目の試行を行いません。

しかし、これは役に立ちませんでした。

コードまたはSSRSのインストールを修正する方法について誰かがアイデアを持っていますか?アプリケーションをSSRSインスタンスのサーバーとは別のサーバーに配置したいと思います。

4

1 に答える 1

0

残念ながら、アプリケーションをスリープから復帰させた可能性があります。なんらかの理由で、アイドル時間が経過した後に ssrs をオンラインに戻すと、起動と環境をロードするプロセスにペナルティが課せられます。アプリがオンラインに戻ると、期待どおりの方法でリクエストを処理します。

リソースをポーリングする 1 時間ごとのタスクを作成することで、ウェイクアップを問題から外し、システムの応答性を高めることができる場合。

  1. 次のコンテンツを含む PowerShell ファイルをスクリプト フォルダーに作成します。

    $wc = New-Object system.net.webClient $username = 'ReportAdmin' $password = 'ReportAdmin' $cred = New-Object System.Management.Automation.PSCredential -ArgumentList @($username,(ConvertTo-SecureString -String $パスワード -AsPlainText -Force))

    $wc.Credentials = $cred
    $src = $wc.DownloadString(“http://<SSRSSERVERNAME>/SSRS/Pages/Folder.aspx”)
    
  2. 次の内容で、スクリプト フォルダーにバッチ ファイルを作成します。

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

  1. 1 時間ごとに実行され、ssrs を維持するジョブを作成します。これを行うには、このコンテンツを保存して Windows タスク マネージャーにインポートします。

     <?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>
    
于 2013-03-21T04:04:07.593 に答える