Laden...

Problem beim Disposen von CryptoStream

Erstellt von JunkyXL vor 15 Jahren Letzter Beitrag vor 15 Jahren 652 Views
JunkyXL Themenstarter:in
1.665 Beiträge seit 2006
vor 15 Jahren
Problem beim Disposen von CryptoStream

Hallo,

ich habe ein seltsames Problem, was ich mittlerweile mit einem "Workaround" umgehe.

Ich serialisiere mit dem CryptoStream ein Objekt, das funktioniert tadellos.

Beim Deserialisieren gibt es aber manchmal eine Exception, die zudem sehr aussagekräftig ist ("Bad Data", InnerException = null).
Womit könnte diese Exception zusammenhängen?

Das Objekt wird korrekt deserialisiert, alle Daten sind da.
Beim Disposen des CryptoStreams taucht der Fehler auf.

public static T GetInstance(Stream stream)
{
    DESCryptoServiceProvider csp = new DESCryptoServiceProvider();
    csp.Key = ASCIIEncoding.ASCII.GetBytes("ABCDEFGH");
    csp.IV = ASCIIEncoding.ASCII.GetBytes("ABCDEFGH");

    T instance = default(T);

    try
    {
        using (CryptoStream cryptoStream = new CryptoStream(stream, csp.CreateDecryptor(), CryptoStreamMode.Read))
        {
            BinaryFormatter formatter = new BinaryFormatter();
            object tmp = formatter.Deserialize(cryptoStream);
            if (tmp is T)
            {
                instance = (T)tmp;
            }
        } // <-- Dispose, -> Exception
    }
    catch (Exception ex)
    {
        // "Bad Data"
    }

    return instance;
}

Übergebener Stream ist ein FileStream (File.OpenRead(string file))
Wird durch den CryptoStream Disposed.

Wie gesagt, tritt der Fehler nur manchmal auf. Mir ist aufgefallen, dass wenn manche string-Propertywerte vom Objekt unter 3 Zeichen lang sind, der Fehler beim Deserialisieren so gut wie immer auftaucht. Ansonsten ab und zu nur, willkürlich. Aber eine Instanz bekomme ich immer zurück..

Für mich deutet momentan nichts auf den Fehler hin. Woher könnte er kommen?

630 Beiträge seit 2007
vor 15 Jahren

Hallo JunkyXL,

probier mal vor dem Disposen cryptoStrem.FlushFinalBlock() und Close() aufzurufen.

Gruss
tscherno

To understand recursion you must first understand recursion

http://www.ilja-neumann.com
C# Gruppe bei last.fm

JunkyXL Themenstarter:in
1.665 Beiträge seit 2006
vor 15 Jahren

hatte ich schon probiert, da tritt die Exception auch auf. Daher wird sie wohl auch kommen beim "automatischen" Disposen.