2 Stimmen

Einen Stream in einer BizTalk-Pipeline-Komponente entsorgen?

Ich bin ziemlich neu in BizTalk und Erstellen einer benutzerdefinierten Pipeline-Komponente. Ich habe in Beispielen Code gesehen, der dem folgenden ähnlich ist:

public void Disassemble(IPipelineContext pContext, IBaseMessage pInMsg)
{

    Stream originalDataStream = pInMsg.BodyPart.GetOriginalDataStream();
    StreamReader strReader = new StreamReader(originalDataStream);

    string strOriginalData = strReader.ReadToEnd();

    byte[] bufferOriginalMessage = new byte[strOriginalData.Length];
    bufferOriginalMessage = ASCIIEncoding.Default.GetBytes(strOriginalData);

    Stream ms = new MemoryStream();
    ms.Write(bufferOriginalMessage, 0, strOriginalD

    //other stuff here

    ms.Seek(0, SeekOrigin.Begin);
    pInMsg.BodyPart.Data = ms;
}

Aber nirgendwo in der Methode wird der StreamReader geschlossen oder entsorgt. Die Methode wird einfach beendet.

Normalerweise ist es bei der Verwendung von StreamReader und anderen Klassen die beste Praxis, eine using-Anweisung zu verwenden, damit der Stream automatisch entsorgt wird.

Gibt es einen bestimmten Grund (vielleicht in BizTalk), warum Sie diesen StreamReader nicht entsorgen würden?

Ich habe keine Informationen zu diesem Punkt gefunden. Kann jemand helfen?

3voto

tomasr Punkte 13533

Im Allgemeinen ist es eine gute Praxis, Leser und Streams, die Sie nicht mehr benötigen, zu schließen. Allerdings ist dies nicht unbedingt immer zu 100 % erforderlich. Zum Beispiel würde das Schließen des Lesers den zugrunde liegenden Stream normalerweise schließen, aber die Chancen stehen gut, dass etwas anderes den Stream bereits kennt und ihn zum richtigen Zeitpunkt von selbst schließt.

Es hat sich jedoch bewährt, alle Streams, die Sie in einer Pipeline-Komponente verwenden und deren Lebensdauer mit der der Nachricht übereinstimmt, der Ressourcen-Tracker so dass BizTalk sie automatisch entsorgen kann, wenn die Ausführung der Pipeline beendet und die Nachricht verarbeitet wurde.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X