Autor Beitrag
paddy14
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 122



BeitragVerfasst: Di 17.05.11 16:32 
Guten Tag Forum,

habe da ein kleines Prob mit dem Serialisieren und Deserialisieren.

hier der Code vom Server:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
serial s = new serial();
s.id = 1;
s.nachricht = "foo";
BinaryFormatter formatter = new BinaryFormatter();
formatter.Serialize(stream, s);





und hier von Client:
ausblenden C#-Quelltext
1:
2:
3:
4:
Thread.Sleep(500);
BinaryFormatter formatter = new BinaryFormatter();
s = (serial)formatter.Deserialize(stream);
richTextBox1.Invoke(new MethodInvoker(ausgabe));




dabei bekomme ich folgende Exception, kann einer was damit anfangen und mir bitte erklären was ich falsch mache.
Exception: Die Assembly "server_serialisieren, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" kann nicht gefunden werden.


Wenn ich das mit MemoryStream mache
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
Thread.Sleep(500);               
MemoryStream mem = new MemoryStream(lesen);
BinaryFormatter formatter = new BinaryFormatter();                
serial s = (serial)formatter.Deserialize(stream);
mem.close();                
richTextBox1.Invoke(new MethodInvoker(ausgabe));


dann bekomme ich diese Exception.
Der binäre Stream "0" enthält keinen gültigen BinaryHeader. Möglicherweise ist der Stream ungültig oder die Objektversion wurde zwischen der Serialisierung und der Deserialisierung geändert.

Danke
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4764
Erhaltene Danke: 1052

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Di 17.05.11 17:31 
Hallo,

verwenden Client und Server denn dieselbe Assemly (in der dieser Typ 'serial' definiert ist)? s.a. stackoverflow.com/qu...rializationexception (es reicht also nicht, einfach nur die Klasse in beiden Projekten zu verwenden)

Andere Lösung mittels der System.Runtime.Serialization.SerializationBinder-Klasse: spazzarama.wordpress...le-to-find-assembly/
paddy14 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 122



BeitragVerfasst: Di 17.05.11 21:06 
Nur eine kurze Frage noch dazu.

Wie binde ich eig die selbe Klasse in einem anderen Projekt ein, habe da was gelesen das das mit einer dll datei geht.

Stimmt das???

mfg patrick
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4700
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Di 17.05.11 21:09 
Zitat:
Der binäre Stream "0" enthält keinen gültigen BinaryHeader. Möglicherweise ist der Stream ungültig oder die Objektversion wurde zwischen der Serialisierung und der Deserialisierung geändert


Willst du uns sagen du hast testweise in einem Prozess mal in einen Stream serialisiert und sofort wieder aus diesem Stream deserialisiert? Dann solltest du zwichenzeitlich mal den Streampointer des Streams wieder auf den Anfang setzen. Durch das serialisieren ist die aktuelle Position im Stream ans Ende der serialisierten Bytefolge gerutscht. Wenn du dann deserialisierst wirst du ab dort natürlich nichts mehr finden. Also zwischenzeitlich die Position Property wieder an die Stelle des Stream setzen an der du angefangen hast zu serialisieren(Wenn der Stream vorher leer war also auf Position = 0 setzen.)
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4700
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Di 17.05.11 21:14 
Zitat:
Wie binde ich eig die selbe Klasse in einem anderen Projekt ein, habe da was gelesen das das mit einer dll datei geht.


Du brauchst eine Referenz auf die Assembly in der die Klasse steckt. Das muss aber nicht zwingend eine Dll sein kann auch eine EXE sein. Wenn du eine Klasse in zwei Anwendungen brauchst ist es aber definitiv am geschicksten sie in einer 3.ten Assembly vorzuhalten die von den beiden Anwendungen benutzt wird.
paddy14 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 122



BeitragVerfasst: Di 17.05.11 21:34 
Also das was ich darüber weiß und ich weiß nicht ob ich das richtig verstanden habe ist, ich erzeuge z.B. in meinem Server eine DLL und und erstelle einen Verweis auch meinem Client und dann sollte das die selbe Klasse sein.

Das brauche ich ja auch damit die ganze Sache geht oder nicht?
paddy14 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 122



BeitragVerfasst: Di 17.05.11 22:30 
Alles klar ich habe es hinbekommen, einfach ne DLL erzeugt und dann ins andere Projekt eingebunden und schon ging es.

Ich sag ja, kaum macht man es richtig geht es :D.

Schönen Abend euch noch und vielen dank für die Hinweise.
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4700
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Di 17.05.11 22:30 
Häh? Wenn du meinst das die Dll die du im Server benutzt (also auf die der Serverprozess eine Referenz hat) auch vom Clientprozess benutzt wird(der Clientprozess hat ebenfalls eine Referenz auf diese Dll) dann Ja. Das wäre die Grundlage dafür das man über einen Typen aus der Dll zwischen diesen beiden Prozessen per BinaryFormatter kommunizieren kann.