我在Sitecore中有一個自定義模塊,如果應用程序池會話狀態設置爲In process
,它可以正常工作。當我將其更改爲SQL Server
時,出現錯誤消息,指出它無法序列化會話狀態。我使用的所有課程都是serializable
。我的代碼是由自定義功能區按鈕觸發的,當點擊它時會引發此錯誤。它應該顯示對話框形式,但它會顯示錯誤消息。我認爲這與我的類繼承的Sitecore DialogForm
類有關,但事實證明情況並非如此。在Sitecore中的序列化
當我調試的代碼引發錯誤一旦Run(TranslateArgs args)
方法執行結束 - 它是從public override void Execute(CommandContext context)
調用,應該通過調用SheerResponse.ShowModalDialog(str4.ToString(), true);
我也認爲這是因爲我在Run
方法用於ClientPipelineArgs
顯示對話框,但創建自定義類(並使其可序列化)後,繼承ClientPipelineArgs
錯誤並沒有消失。
任何想法可能會導致它?
public override void Execute(CommandContext context)
{
try
{
Error.AssertObject(context, "context");
if (context.Items.Length == 1)
{
Item item = context.Items[0];
NameValueCollection parameters = new NameValueCollection();
parameters["id"] = item.ID.ToString();
parameters["language"] = item.Language.ToString();
parameters["version"] = item.Version.ToString();
var contentDatabase = item.Database;
Context.ClientPage.Start(this, "Run", parameters);
}
}
catch (Exception ex)
{
logger.Error(ex.StackTrace);
}
}
protected void Run(ClientPipelineArgs args)
{
try
{
string str = args.Parameters["id"];
string name = args.Parameters["language"];
string str3 = args.Parameters["version"];
Item item = Context.ContentDatabase.Items[str, Language.Parse(name), Sitecore.Data.Version.Parse(str3)];
Error.AssertItemFound(item);
if (SheerResponse.CheckModified())
{
if (args.IsPostBack)
{
if (args.Result == "yes")
{
Context.ClientPage.SendMessage(this, "item:load(id=" + str + ",language=" + name + ",version=" + str3 + ")");
}
}
else
{
UrlString str4 = new UrlString(UIUtil.GetUri("control:TranslateGL"));
str4.Add("id", item.ID.ToString());
str4.Add("la", item.Language.ToString());
str4.Add("vs", item.Version.ToString());
str4.Add("ci", item.Language.ToString());
if (IsValidSource(GetLocaleMap(), item.Language.ToString()))
{
SheerResponse.ShowModalDialog(str4.ToString(), true);
}
else
{
SheerResponse.Alert("Cannot export");
}
args.WaitForPostBack();
}
}
}
catch (Exception ex)
{
logger.Error(ex.StackTrace);
}
}
堆棧跟蹤:
[SerializationException:在安裝類型「Sitecore.Data.Database 'Sitecore.Kernel,版本= 7.0.0.0,文化=中立,公鑰=空' 未標記爲序列化的。] System.Runtime.Serialization.FormatterServices.InternalGetSerializableMembers(RuntimeType型)14210117個 System.Runtime.Serialization.FormatterServices.GetSerializableMembers(類型類型,的StreamingContext上下文)408 System.Runtime.Serialization.Formatters.Binary.WriteObjectInfo .InitMemberInfo()+420 System.Runtime.Serialization.Formatters.Bina ry.WriteObjectInfo.InitSerialize(Object obj,ISurrogateSelector surrogateSelector,StreamingContext context,SerObjectInfoInit serObjectInfoInit,IFormatterConverter converter,ObjectWriter objectWriter,SerializationBinder binder)+532 System.Runtime.Serialization.Formatters.Binary.ObjectWriter.Write(WriteObjectInfo objectInfo,NameInfo memberNameInfo, NameInfo typeNameInfo)+969 System.Runtime.Serialization.Formatters.Binary.ObjectWriter.Serialize(Object graph,Header [] inHeaders,__BinaryWriter serWriter,Boolean fCheck)+633 System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Serialize (Stream serializationStream,Object graph,Header [] headers,Boolean fCheck)+322 System.Web.Util.AltSerialization.WriteValueToStream(Object value,BinaryWriter writer)+1487
[HttpException(0x80004005):無法序列化會話狀態。在'StateServer'和'SQLServer'模式下,ASP.NET將序列化會話狀態對象,因此不允許使用不可序列化的對象或MarshalByRef對象。如果自定義會話狀態存儲以「自定義」模式執行類似的序列化,則適用相同的限制。] System.Web.Util.AltSerialization.WriteValueToStream(Object value,BinaryWriter writer)+2252727 System.Web.SessionState.SessionStateItemCollection。 WriteValueToStreamWithAssert(Object value,BinaryWriter writer)+49 System.Web.SessionState.SessionStateItemCollection.Serialize(BinaryWriter writer)+729 System.Web.SessionState.SessionStateUtility.Serialize(SessionStateStoreData item,Stream stream)+336 System.Web。 SessionState.SessionStateUtility.SerializeStoreData(SessionStateStoreData item,Int32 initialStreamSize,Byte [] & buf,Int32 & length,Boolean compressionEnabled)+99 System.Web.SessionState.SqlSessionStateStore。SetAndReleaseItemExclusive(HttpContext context,String id,SessionStateStoreData item,Object lockId,Boolean newItem)+3538900 System.Web.SessionState.SessionStateModule.OnReleaseState(Object source,EventArgs eventArgs)+1021 System.Web.SyncEventExecutionStep.System.Web.HttpApplication .IExecutionStep.Execute()92 System.Web.HttpApplication.ExecuteStep(IExecutionStep步驟,布爾& completedSynchronously)165
你能提供你的代碼嗎?仔細檢查你沒有匿名方法,他們也可能導致這個問題。 – Anton
您能否提供StackTrace? –
已添加堆棧跟蹤 – James