Hinzufügen eines Anhangs zu einer User Story mithilfe von Rally REST .NET

Wir sind dabei, unseren .NET-Rally-Code von SOAP auf die REST .NET-API zu portieren. Bisher ist die REST-API so gut, dass sie schneller und benutzerfreundlicher zu sein scheint, da es keine WSDL gibt, die bei jeder Änderung der benutzerdefinierten Felder des Arbeitsprodukts im Rallye-Arbeitsbereich unterbrochen werden kann.

Ich habe jedoch Probleme mit einer Sache, da wir versuchen, die Fähigkeit zum Hochladen von Anhängen zu replizieren. Wir folgen einer sehr ähnlichen Prozedur wie in diesem Beitrag beschrieben:

Rally SOAP API - Wie füge ich einer hierarchischen Anforderung einen Anhang hinzu?

Wobei das Bild in ein System.Drawing.Image eingelesen wird. Mit der ImageToByteArray-Funktion konvertieren wir das Bild in ein Byte-Array, das dann dem zuerst erstellten AttachmentContent zugewiesen wird.

Anschließend wird der Anhang erstellt und sowohl mit dem Anhangsinhalt als auch mit der hierarchischen Anforderung verbunden.

Alle Kreationsereignisse funktionieren hervorragend. Das Inhaltsobjekt wird einwandfrei erstellt. Anschließend wird der neue Anhang "Image.png" erstellt und mit der Story verknüpft. Aber wenn ich den resultierenden Anhang von Rallye herunterlade, hat Image.png null Bytes! Ich habe dies mit verschiedenen Bildern, JPEGs, PNGs usw. versucht, alle mit den gleichen Ergebnissen.

Ein Auszug des Codes, der unseren Prozess zeigt, ist unten enthalten. Gibt es etwas Offensichtliches, das ich vermisse? Danke im Voraus.

    // .... Read content into a System.Drawing.Image called imageObject ....

    // Convert Image to byte array
    byte[] imageBytes = ImageToByteArray(imageObject, System.Drawing.Imaging.ImageFormat.Png);
    var imageLength = imageBytes.Length;

    // AttachmentContent
    DynamicJsonObject attachmentContent = new DynamicJsonObject();
    attachmentContent["Content"] = imageBytes ;

    CreateResult cr = restApi.Create("AttachmentContent", myAttachmentContent);
    String contentRef = cr.Reference;
    Console.WriteLine("Created: " + contentRef);

    // Set up attachment
    DynamicJsonObject newAttachment = new DynamicJsonObject();
    newAttachment["Artifact"] = story;
    newAttachment["Content"] = attachmentContent;
    newAttachment["Name"] = "Image.png";
    newAttachment["ContentType"] = "image/png";
    newAttachment["Size"] = imageLength;
    newAttachment["User"] = user;


    // Create the attachment in Rally
    cr = restApi.Create("Attachment", newAttachment);

    String attachRef = cr.Reference;
    Console.WriteLine("Created: " + attachRef);

}

public static byte[] ImageToByteArray(Image image, System.Drawing.Imaging.ImageFormat format)
{
    using (MemoryStream ms = new MemoryStream())
    {
        image.Save(ms, format);

        // Convert Image to byte[]                
        byte[] imageBytes = ms.ToArray();
        return imageBytes;
    }
}

Antworten auf die Frage(1)

Ihre Antwort auf die Frage