2013-03-12 69 views
4

在我的asp.net應用程序我有一個運行了大量的參數(請在參數列表中的所有選項)我收到以下異常被拋出SSRS異常由於對象的當前狀態,操作無效。和AspNetSessionExpiredException

Operation is not valid due to the current state of the object. 
報告時連接到SSRS端點reportview

我看過很多博客以及在這裏發佈的帖子,這些帖子引用MS應用的安全補丁作爲貢獻原因,從而將收集的項目數量限制爲1000.

我也看到了建議在位於的wcf託管服務的web.config文件中添加appSettings標記10並添加以下條目

<appSettings> 
    <add key="aspnet:MaxHttpCollectionKeys" value="20000" /> 
    </appSettings> 

我試過這個建議沒有運氣。運行sql2008r2的服務器沒有提到任何一個安全更新,並將appSettings值添加到web.config(配置ssrs管理站點或端點)對異常沒有任何影響。如果我有更多的20K物品,我甚至會增加價值(100000)。

我的第二個想法是,在wsHttp請求上的數據包大小可能會很大,我也需要增加。

更新 經過挖掘更多我發現我在正確的軌道上。以上是部分解決方案,根據MS條目KB2661403 MaxCollectionKey只是條目的一部分。第二部分是參數的系列化第二項需要被添加到appSettings部分

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

當我開始思考這個我也是在這個需要輸入不正確。它不需要在SSRS端點web.config上輸入,而是在託管報告查看器控件的站點上輸入。將這兩個條目添加到web.config導致對象成功傳遞。現在,SSRS系統正在返回一個ASP.NETSessionTimeOut異常,所以我需要嘗試延長此超時以查看是否可以在大型查詢中獲取數據。

有沒有人有任何建議或建議?

-Cheers

+2

我認爲你應該退後一步並重新設計這個報告,因此它不需要傳遞太多的參數值,並且在超時期限內運行。這兩個問題通常是相關的 - 發送數千個參數值會創建一個困難的查詢計劃。 – 2013-03-13 00:38:51

+0

@MikeHoney是的,我同意,但產品管理部門已經認爲,否則不管我的建議(笑) – rlcrews 2013-03-13 04:25:28

+0

得到愛經理告訴IT如何做他們的工作。讓你想知道爲什麼他們聘請專家時,他們不會聽他們。祝你好運! – ShellNinja 2013-11-29 18:19:17

回答

1

你不能總是重新設計,當客戶希望report--客戶需要。

這就是說,我們正在運行這個錯誤,對於越來越多的具有用於級聯參數的大數據集的報告。我們在下拉菜單中選擇了多個參數值超過1500的報告。上述解決方案適用於某些解決方案,但不適用於其他解決方案。這就是當一位同事(Pranay Papishetty)提出了一個很好的解決方案時(我將所有的域名都留下來,而不是替換爲通用描述,你應該仍然可以得到這個意見):

Fix對於POS_08的訂閱問題:

報告POS_08具有帶有標籤Organization Unit的參數:其下拉值接近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] 
; 

當用戶想選擇所有組織單位通過這種方式,他們可以選擇,而不是選擇和傳球整個下拉值查詢「所有組織單位」。 這減少了報告的執行時間並提高了查詢的性能。所有更改實施後,訂閱也成功完成。

相關問題