2012-08-02 59 views
8

有很多類似於這樣的問題......但我沒有看到他們是如何有這樣的具體問題:由於Microsoft.Web.Services3.StateManager,無法序列化會話狀態?

我有一個Web服務,它返回開頭的錯誤:

無法序列化會話狀態。在「StateServer」和 「SQLServer」模式下,ASP.NET將序列化會話狀態對象 ,結果不允許不可序列化的對象或MarshalByRef對象爲 。如果類似序列化 由自定義會話狀態存儲以「自定義」模式完成,則適用相同的限制。

因此,像this這樣的問題提到要查找SerializationException,找出什麼是無法序列化,並使其可序列化。聽起來簡單...但是當我看到它,我覺得這一點:

[SerializationException:類型 'Microsoft.Web.Services3.StateManager' 在大會「Microsoft.Web.Services3,版本= 3.0.0.0 , 文化=中性公鑰= 31bf3856ad364e35' 未標記爲 序列化。]

這混淆了我......這聽起來像它實際上是試圖序列的StateManager ...它只是它隱藏了StateManager中的其他內容是無法序列化的?如果是這樣,有沒有辦法找出什麼?或者是StateManager真的應該由於某種原因可序列化? (我懷疑我沒有說清楚這一點......對不起......如果你有問題,我會盡我所能來回答他們。)

我還應該注意的一件事是我們是使用NCache作爲會話存儲提供商,看起來它可能以某種方式相關。但是,我不清楚這可能會導致我所看到的。

+0

這很奇怪。你可以把它放在一個特定的代碼行嗎?它發生在每個方法調用上,還是隻發生在某些方法上? – 2012-09-12 21:15:01

+0

不幸的是,也沒有。它有時只會發生,儘管它會連續發生幾次,但它會消失,之後我們無法再現它,因此很難追蹤到它。 – Beska 2012-09-13 12:42:20

+0

我假設你已經檢查了你明確放入會話狀態或將會話用作後備存儲的所有內容,而且你並不是偶然將StateManager放入會話中。 (如果你真的這樣做,你可能會看到更多的模式)。既然你說你正在使用NCache,那麼我會開始與那家公司談話,如果你還沒有評論該公司的論壇等。 – 2012-09-13 15:20:00

回答

1

如果您要序列化自定義對象,請確保使用該屬性修飾類。如果沒有任何對象放入會話狀態,串行器將失敗。您可能需要隔離您正在存儲的項目並檢查其屬性,並確定它本身具有該屬性。