Ich habe ein benutzerdefiniertes Modul in Sitecore, das funktioniert, wenn App Pool Sitzungsstatus auf In process
festgelegt ist. Wenn ich es zu SQL Server
ändere, erhalte ich die Fehlermeldung, dass es nicht möglich ist, den Sitzungsstatus zu serialisieren. Alle meine Klassen, die ich verwende, sind serializable
. Mein Code wird durch eine benutzerdefinierte Multifunktionsleisten-Schaltfläche ausgelöst und dieser Fehler wird ausgelöst, wenn ich darauf klicke. Es soll Dialogformular anzeigen, aber es zeigt stattdessen Fehlermeldung. Ich dachte, es hat etwas mit der Klasse Sitecore DialogForm
zu tun, die meine Klasse erbt, aber es stellte sich heraus, dass dies nicht der Fall ist.Serialisierung in Sitecore
Wenn ich debuggen die Codefehler einmal ausgelöst wird Run(TranslateArgs args)
Methode Ausführung beendet hat - aus public override void Execute(CommandContext context)
aufgerufen und soll Dialog angezeigt werden durch den Aufruf SheerResponse.ShowModalDialog(str4.ToString(), true);
Ich dachte auch, dass es war, weil ich ClientPipelineArgs
in Run
Methode , aber nach dem Erstellen der benutzerdefinierten Klasse (und macht es serialisierbar), die erbt ClientPipelineArgs
Fehler ist nicht weg.
Irgendwelche Ideen, was könnte es verursachen?
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);
}
}
Stack Trace:
[SerializationException: Typ 'Sitecore.Data.Database' in Versammlung Sitecore.Kernel, Version = 7.0.0.0, Culture = neutral, PublicKeyToken = null "ist nicht markiert als serializable.] System.Runtime.Serialization.FormatterServices.InternalGetSerializableMembers (Runtime Typ) 14210117 System.Runtime.Serialization.FormatterServices.GetSerializableMembers (Typ Typ, Streaming Kontext) +408 System.Runtime.Serialization.Formatters.Binary.WriteObjectInfo .InitMemberInfo() +420 System.Runtime.Serialization.Formatters.Bina ry.WriteObjectInfo.InitSerialize (Object-Objekt, ISurrogateSelector-SurrogatSelector, StreamingContext-Kontext, SerObjectInfoInit serObjectInfoInit, IFormatterConverter-Converter, ObjectWriter-ObjektWriter, SerializationBinder-Binder) +532 System.Runtime.Serialization.Formatters.Binary.ObjectWriter.Write (WriteObjectInfo objectInfo, NameInfo memberNameInfo, NameInfo typeNameInfo) +969 System.Runtime.Serialization.Formatters.Binary.ObjectWriter.Serialize (Objektdiagramm, Header [] in Header, __BinaryWriter serWriter, boolesches fCheck) +633 System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Serialize (Stream serializationStream, Objektdiagramm, Header [] - Header, Boolean fCheck) +322 System.Web.Util.AltSerialization.WriteValueToStream (Objektwert, BinaryWriter-Schreiber) +1487
[HttpException (0x80004005): Der Sitzungsstatus konnte nicht serialisiert werden. Im Modus 'StateServer' und 'SQLServer' serialisiert ASP.NET die Sitzungsstatusobjekte, und daher sind nicht serialisierbare Objekte oder MarshalByRef-Objekte nicht zulässig. Dieselbe Einschränkung gilt, wenn der benutzerdefinierte Sitzungsspeicher im Modus 'Benutzerdefiniert' eine ähnliche Serialisierung durchführt.] System.Web.Util.AltSerialization.WriteValueToStream (Objektwert, BinaryWriter-Writer) +2252727 System.Web.SessionState.SessionStateItemCollection. WriteValueToStreamWithAssert (Objektwert, Binary Drehbuch) +49 System.Web.SessionState.SessionStateItemCollection.Serialize (Binary Drehbuch) 729 System.Web.SessionState.SessionStateUtility.Serialize (SessionStateStoreData Artikel, Stream Stream) +336 System.Web. SessionState.SessionStateUtility.SerializeStoreData (SessionStateStoreData-Element, Int32 initialStreamSize, Byte [] & buf, Int32 & Länge, Boolean compressionEnabled) +99 System.Web.SessionState.SqlSessionStateStore.SetAndReleaseItemExclusive (Httpcontext Kontext, String-ID, SessionStateStoreData Artikel, Object Lockid, Boolean newItem) 3538900 System.Web.SessionState.SessionStateModule.OnReleaseState (Object Quelle, EventArgs EventArgs) 1021 System.Web.SyncEventExecutionStep.System.Web.HttpApplication .IExecutionStep.Execute() +92 System.Web.HttpApplication.ExecuteStep (IExecutionStep Schritt, Boolean & completedSynchronously) +165
Können Sie Ihren Code angeben? Vergewissern Sie sich, dass Sie keine anonymen Methoden haben. Dies könnte auch zu diesem Problem führen. – Anton
Könnten Sie bitte den StackTrace bereitstellen? –
Hinzugefügte Stack Trace – James