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

客戶抱怨"系統時常要登入"有一陣子了,偶是用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版本及以前不支持序列化
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值