gpt4 book ai didi

asp.net - SSRS 异常 由于对象的当前状态,操作无效。和 AspNetSessionExpiredException

转载 作者:行者123 更新时间:2023-12-02 10:46:02 25 4
gpt4 key购买 nike

在我的 asp.net 应用程序中,我有一个在运行具有大量参数的报告时连接到 ssrs 端点的报 TableView (选择参数列表中的所有选项),我收到抛出以下异常

Operation is not valid due to the current state of the object.

我在这里看到了许多博客和帖子,其中引用了 MS 应用的安全补丁作为导致此问题的原因,该补丁将集合中可以拥有的项目数量限制为 1000。

我还看到了在位于 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 管理站点或端点的配置)不会对异常产生任何影响。如果我有超过 20k 件元素,我什至会增加值(value) (100000)。

我的第二个想法是 wsHttp 请求的数据包大小可能太大,我也需要增加它。

更新经过更多挖掘后,我发现我走在正确的轨道上。以上是根据MS条目KB2661403的部分解决方案MaxCollectionKey 只是条目的一部分。第二部分是参数的序列化,需要将第二个条目添加到 appSettings 部分

<add key="aspnet:MaxJsonDeserializerMembers" value="1000" />

当我开始思考这个问题时,我在需要输入的地方也不正确。不需要在 SSRS 端点 web.config 上输入,而是在托管报表查看器控件的站点上输入。将这两个条目添加到 web.config 会导致对象成功传递。现在 SSRS 系统返回 ASP.NETSessionTimeOut 异常,因此我需要尝试延长此超时,看看是否可以在大型查询上取回数据。

有人有什么建议或推荐吗?

-干杯

最佳答案

您不能总是重新设计报告 - 当客户需要时就需要重新设计报告。

也就是说,对于越来越多的带有级联参数的大型数据集的报告,我们经常遇到此错误。我们有一些包含多个参数的报告,下拉列表中包含超过 1500 个值。上述解决方案对某些人有效,但对另一些人无效。这时,一位同事(Pranay Papishetty)想出了一个很好的解决方案(我将所有字段名称保留原样,而不是换成通用描述。您应该仍然能够明白要点):

修复 POS_08 的订阅问题:

报告 POS_08 有一个带有标签组织单位的参数:其下拉值接近 1500。此报告还有几个其他参数,每个参数的下拉值数量相当多,这是在设置订阅时产生的问题那个报告。由于参数下拉值较多,即使对报表服务器进行了一些架构更改后,问题也没有得到解决。

我在数据集中提出了一种参数屏蔽。通常,为了将组织单位传递到主数据集查询,我们在主查询的 where 子句中使用以下过滤器

dbo.vw_orgunit.orgunit in @orgunit

(@OrgUnit 是将组织单位传递给查询的参数。)

我没有使用上述组织单位过滤器,而是使用了修改后的过滤器,如下所示:

((dbo.vw_orgunit.Orgunit IN ((SELECT item
FROM [DW_Master].[dbo].fn_Split (@orgunit_d, ','))))
OR (@orgunit_d) IN ('All Org Units'))

参数“组织单位”对应的数据集也进行如下修改,在下拉值中添加“所有组织单位”值。

    SELECT DISTINCT 
[OrgUnit] AS [OrgUnit_Code],
[OrgUnitDescription] AS [OrgUnit_Desc],
([OrgUnit] + ' - ' + [OrgUnitDescription]) AS [OrgUnit_Label]
FROM dbo.vw_DimOrgUnit
WHERE (
[OrgLevelAgency] = '73'
AND [OrgLevelFiscalYear] IN ( @FiscalYear )
AND ([OrgLevel_1] + ' - ' + [OrgLevel_1_Description]) IN ( @OrgLevel_1_Label )
AND ([OrgLevel_2] + ' - ' + [OrgLevel_2_Description]) IN ( @OrgLevel_2_Label )
AND ([OrgLevel_3] + ' - ' + [OrgLevel_3_Description]) IN ( @OrgLevel_3_Label )
) OR [OrgUnitSKey] = '-1' OR ( [OrgUnit] = '5117' AND [OrgUnitFiscalYear] = '2013' /* A Special Case*/ )

UNION
SELECT '' , '', '(Blank)'
UNION
SELECT 'none' , 'none', 'None'
UNION
SELECT '-100','All Org Units','All Org Units'
ORDER BY [OrgUnit]
;

这样,当用户想要选择所有组织单位时,他们只需选择“所有组织单位”,而不是选择整个下拉值并将其传递给查询。这减少了报表的执行时间并提高了查询的性能。实现所有更改后,订阅也已成功设置。

关于asp.net - SSRS 异常 由于对象的当前状态,操作无效。和 AspNetSessionExpiredException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15365308/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com