2009-08-12 4 views
1

Hier persistierenden ist der Stack-Trace der Ausnahme, die ich bekommen, wenn der Workflow beibehalten wird:einen PersistenceException Empfangen, wenn Workflow-

System.Workflow.Runtime.Hosting.PersistenceException: Type 'System.Xml.XmlElement' in Assembly 'System.Xml, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' is not marked as serializable. ---> System.Runtime.Serialization.SerializationException: Type 'System.Xml.XmlElement' in Assembly 'System.Xml, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' is not marked as serializable. 
    at System.Runtime.Serialization.FormatterServices.InternalGetSerializableMembers(RuntimeType type) 
    at System.Runtime.Serialization.FormatterServices.GetSerializableMembers(Type type, StreamingContext context) 
    at System.Runtime.Serialization.Formatters.Binary.WriteObjectInfo.InitMemberInfo() 
    at System.Runtime.Serialization.Formatters.Binary.WriteObjectInfo.InitSerialize(Object obj, ISurrogateSelector surrogateSelector, StreamingContext context, SerObjectInfoInit serObjectInfoInit, IFormatterConverter converter, ObjectWriter objectWriter) 
    at System.Runtime.Serialization.Formatters.Binary.WriteObjectInfo.Serialize(Object obj, ISurrogateSelector surrogateSelector, StreamingContext context, SerObjectInfoInit serObjectInfoInit, IFormatterConverter converter, ObjectWriter objectWriter) 
    at System.Runtime.Serialization.Formatters.Binary.ObjectWriter.Serialize(Object graph, Header[] inHeaders, __BinaryWriter serWriter, Boolean fCheck) 
    at System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Serialize(Stream serializationStream, Object graph, Header[] headers, Boolean fCheck) 
    at System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Serialize(Stream serializationStream, Object graph) 
    at System.Workflow.ComponentModel.Activity.Save(Stream stream, IFormatter formatter) 
    at System.Workflow.ComponentModel.Activity.Save(Stream stream) 
    at System.Workflow.Runtime.Hosting.WorkflowPersistenceService.GetDefaultSerializedForm(Activity activity) 
    at System.Workflow.Runtime.Hosting.SqlWorkflowPersistenceService.SaveWorkflowInstanceState(Activity rootActivity, Boolean unlock) 
    at System.Workflow.Runtime.WorkflowExecutor.Persist(Activity dynamicActivity, Boolean unlock, Boolean needsCompensation) 
    --- End of inner exception stack trace --- 
    at System.Workflow.Runtime.WorkflowExecutor.Persist(Activity dynamicActivity, Boolean unlock, Boolean needsCompensation) 
    at System.Workflow.Runtime.WorkflowExecutor.ProtectedPersist(Boolean unlock) 

Wie und wo kann ich diese Ausnahme debuggen?

+0

Verwenden Sie den SQL-Persister? –

Antwort

2

Die Fehlermeldung sagt Ihnen, direkt an der Spitze:

'System.Xml.XmlElement' in Assembly ‚System.Xml, Version = 2.0.0.0, Culture = neutral, PublicKeyToken = b77a5c561934e089 'ist nicht als serialisierbar markiert.

Wenn ein Workflow die WorkflowPersistenceService beibehalten wird verwendet die binäre Serializer alle Daten in den Workflow zu entleeren. Alles, was da drin ist, muss entweder als nicht serialisierbar gekennzeichnet sein oder binär serialisierbar sein. Ein XmlElement ist nicht so, Sie müssen die Daten auf andere Weise speichern oder gar nicht speichern.

+0

Aber die Ablaufverfolgung spezifiziert keine Datei in meinem Code, wie debugge ich es? – ksa

+0

Das ist, weil es nicht Ihr Code trowing die Ausnahme ist. Aber einige der Daten, die als Teil des Workflows gespeichert werden, sind und Sie wissen, dass der Typ XmlElement ist. Jetzt liegt es an Ihnen, in Ihrem Code nachzusehen, wo Sie XmlElement oder etwas verwenden, das XmlElement intern verwendet. Das kann manchmal etwas schwierig sein, aber wenn ein schneller Scan nicht funktioniert, fange ich normalerweise an, Eigenschaften zu markieren und nicht serialisierbar zu machen und Aktivitäten zu entfernen, bis das Problem verschwindet. Auf diese Weise können Sie die beleidigende Eigenschaft aufspüren. – Maurice

+0

Sie sind richtig, hier ist, was ich denke, könnte das Problem sein, ich bin mir nicht sicher, aber ich rufe einen Webservice, deren Rückgabewert Objekt des Typs XmlNode ist. Ich speichere dieses Objekt in der Abhängigkeitseigenschaft. Ich habe auch [DesignerSerializationVisibilityAttribute (DesignerSerializationVisibility.Content)] hinzugefügt. Ist das die Ursache? Wenn ich den Webservice nicht anrufe, gibt es keinen Fehler und der Workflow bleibt bestehen. – ksa

Verwandte Themen