现在的位置: 首页 > 综合 > 正文

[asp.net1.1]Inproc->StateServer 9/15

2013年12月12日 ⁄ 综合 ⁄ 共 1424字 ⁄ 字号 评论关闭

客戶抱怨"系統時常要登入"有一陣子了,偶是用asp.net1.1,SessionState的mode設的是Inproc

今天痛下決心,將程式中的mode改設為StateServer,但由於本機也安裝了asp.net2.0,而且aspnet_state.exe是針對2.0的,將它停掉後,修改了註冊表中hkey_local_machine->system->currentcontrol->services->aspnet_state->parameters中imagepath值由v2.0.50727改為v1.1.4322後重新啟動aspnet_state服務,1.1版程式開始運行
在執行水晶報表時,卻出現下面的錯誤:
無法序列化工作階段狀態。請注意,如果工作階段狀態模式是 'StateServer' 或 'SQLServer',則不允許非可序列化物件或 MarshalByRef 物件。
描述: 在執行目前 Web 要求的過程中發生未處理的例外情形。請檢閱堆疊追蹤以取得錯誤的詳細資訊,以及在程式碼中產生的位置。
例外詳細資訊: System.Web.HttpException: 無法序列化工作階段狀態。請注意,如果工作階段狀態模式是 'StateServer' 或 'SQLServer',則不允許非可序列化物件或 MarshalByRef 物件。

補記:
不過可以將report不存入session,轉出時再重新執行一次讀取的動作也可以達到目標
有點奇怪的是,datatable不用作序列化

P.S.asp.net2.0是不用再寫序列化代碼的,只要aspnet_state.exe啟動即可

經幾小時查找後,寫VB版的序列化類
Imports CrystalDecisions.CrystalReports.Engine
Imports System.Runtime.Serialization

Public Class MyObject
Implements ISerializable

Public mysqlcns As String
Public sys_user_id As String
Public report As New ReportDocument

Protected Sub New(ByVal info As SerializationInfo, ByVal context As StreamingContext)
mysqlcns = info.GetString("mysqlcns")
sys_user_id = info.GetString("sys_user_id")

End Sub

Public Sub GetObjectData(ByVal info As SerializationInfo, ByVal context As StreamingContext) Implements ISerializable.GetObjectData
info.AddValue("mysqlcns", mysqlcns)
info.AddValue("sys_user_id", sys_user_id)
info.AddValue("report", report)
End Sub
End Class
錯誤依舊,當將報表執行代碼中的Session("report")=report注釋掉後,程式執行正常,但由於Session("report")可啟動手寫的轉Excel或者word功能,注釋掉轉出功能不行了,再查,原來reportdocument在9版本及以前不支持序列化

抱歉!评论已关闭.