asp.net アプリケーション内に、多数のパラメーター (パラメーター リストですべてのオプションを選択) を使用してレポートを実行するときに、ssrs エンドポイントに接続する reportview があります。次の例外がスローされます。
Operation is not valid due to the current state of the object.
コレクションに含めることができるアイテムの数を 1000 に制限する原因として、MS によって適用されたセキュリティ パッチを参照している多くのブログや投稿をここで見てきました。
C:\Program Files\Microsoft SQL Server\MSRS10_50.MSSQLSERVER\Reporting Services\ReportServer
また、次の場所にある wcf ホスティング サービスの web.config ファイル内に appSettings タグを追加し、次のエントリを追加するという提案も見ました。
<appSettings>
<add key="aspnet:MaxHttpCollectionKeys" value="20000" />
</appSettings>
私はこの提案を試してみましたが、うまくいきませんでした。sql2008r2 を実行しているサーバーには、前述のセキュリティ更新プログラムのいずれも適用されておらず、appSettings 値を web.config (ssrs 管理サイトまたはエンドポイントの構成) に追加しても、例外に影響はありません。20,000 個を超えるアイテムがある場合は、値 (100000) を増やしました。
私の 2 番目の考えは、wsHttp 要求のパケット サイズが大きすぎる可能性があり、それも大きくする必要があるということでした。
更新 さらに掘り下げた後、私は正しい軌道に乗っていることがわかりました。上記は、MS エントリKB2661403による部分的な解決策でした。MaxCollectionKey はエントリの一部に過ぎませんでした。2 番目の部分は、2 番目のエントリを appSettings セクションに追加する必要があるパラメーターのシリアル化です。
<add key="aspnet:MaxJsonDeserializerMembers" value="1000" />
これについて考え始めたとき、これを入力する必要がある場所も間違っていました。SSRS エンドポイントの web.config で入力する必要はありませんでしたが、レポート ビューアー コントロールをホストするサイトで入力する必要がありました。これら 2 つのエントリを web.config に追加すると、オブジェクトが正常に渡されます。現在、SSRS システムは ASP.NETSessionTimeOut 例外を返しているため、このタイムアウトを延長して、大規模なクエリでデータを取得できるかどうかを確認する必要があります。
提案や推奨事項はありますか?
-乾杯