Serialisierung/Deserialisierung

Hallo,

ich programmiere einen Windows-Dienst, wobei der Client an den Server EventLog Einträge schickt. Der Client serialisiert das Objekt und der Server deserialisiert.

Nun habe ich folgende Fehlermeldung:

„Failed to deserialize. Reason: 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.“

Ich bin total verzweifelt und finde den Fehler einfach nicht. Ich hoffe und würde mich sehr über eine Hilfe freuen.

Mein Code:

using System;
using System.Collections.Generic;
using System.Text;
using System.Diagnostics;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;

namespace Client_Service.Logic
{
[Serializable]
class EventLogHandler
{
public EventLogHandler()
{

}

public List getEventLogs(string source)
{
//log[0] -> Application
//log[1] -> Security
//log[2] -> System
EventLog[] log = EventLog.GetEventLogs();

List list = new List();
Dictionary dict = new Dictionary();

EventLogEntryCollection col = log[0].Entries;

for (int i = col.Count - 1; i>=0 ; i–)
{
if (col[i].Source.ToString().Equals(source))
{
dict.Add(„Category“, col[i].Category.ToString());
dict.Add(„CategoryNumber“, col[i].CategoryNumber.ToString());
dict.Add(„Index“, col[i].Index.ToString());
dict.Add(„InstanceID“, col[i].InstanceId.ToString());
dict.Add(„MachineName“, col[i].MachineName.ToString());
dict.Add(„Description“, col[i].Message.ToString());
dict.Add(„Source“, col[i].Source.ToString());
dict.Add(„TimeGenerated“, col[i].TimeGenerated.ToString());
dict.Add(„TimeWritten“, col[i].TimeWritten.ToString());
//dict.Add(„Username“, col[i].UserName.ToString());

MyEventLog evtLog = new MyEventLog(dict);

list.Add(evtLog);
dict = new Dictionary();
}
}

return list;
}
public void write(String stringText)
{
StreamWriter myWriter;
string name = @„c:\ClientLOG.txt“;
if (!File.Exists(name))
{
myWriter = File.CreateText(name);
}
else
{
myWriter = File.AppendText(name);
}
myWriter.WriteLine(stringText + „\t\tTime:“ + DateTime.Now);
myWriter.Close();
}

public byte[] serialize(List eventLogs)
{
MemoryStream bout = new MemoryStream();
//BinaryWriter objOut = new BinaryWriter(bout);

//Das Objekt serialisieren
BinaryFormatter bf = new BinaryFormatter();
bf.Serialize(bout, eventLogs);
//objOut.Close();

return bout.ToArray();
}
}
}

Der zugehörige Server-Connector:

using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
using System.Diagnostics;
using System.Threading;
using System.Net.Sockets;
using Client_Service.Logic;

namespace Client_Service
{
[Serializable]
public class Connector
{
private int sek;

public Connector()
{
sek = 1000;
}

public void start()
{
try
{
TcpClient tcpclnt = new TcpClient();
write(„Client: Connecting…“);

tcpclnt.Connect(„127.0.0.1“, 8001);

// use the ipaddress as in the server program

write(„Client: Connected“);

Stream stm = tcpclnt.GetStream();

//EventLog nach folgender Quelle filtern
string source = „EvtEng“;
EventLogHandler evh = new EventLogHandler();

List dict = evh.getEventLogs(source);

write("Client->Schickt: " + dict[0].Description);

//An den Server Schreiben

byte[] ba = evh.serialize(dict);
stm.Write(ba, 0, ba.Length);

tcpclnt.Close();
}

catch (Exception e)
{
write("Error… " + e.StackTrace);
}
}

}
}

Deserialisierung:

using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;
using System.Runtime.Serialization;

namespace Server_Service.Logic
{
class EventLogHandler
{

public List deserialize(byte[] data)
{
if (data == null)
return null;
List obj;

MemoryStream bin = new MemoryStream(data);
//bin.Write(data, 0, data.Length);
bin.Position = 0;
BinaryFormatter formatter = new BinaryFormatter();
obj = (List)formatter.Deserialize(bin);
bin.Close();

return obj;
}
}
}

viele Gruesse,

ich freue mich über jeden Tipp