Jak dodać załącznik do historii użytkownika za pomocą Rally REST .NET

Jesteśmy w trakcie przenoszenia naszego kodu Rally .NET z SOAP do API REST .NET. Do tej pory tak dobrze, REST API wydaje się być szybszy i łatwiejszy w użyciu, ponieważ nie ma WSDL do złamania za każdym razem, gdy niestandardowe pola produktu roboczego zmieniają się w Rally Workspace.

Mam jednak problem z jedną rzeczą, ponieważ próbujemy odtworzyć możliwość przesyłania załączników. Stosujemy bardzo podobną procedurę do tej opisanej w tym wpisie:

Rally SOAP API - Jak dodać załącznik do wymagania hierarchicznego

Dzięki temu obraz jest odczytywany w System.Drawing.Image. Używamy funkcji ImageToByteArray do konwersji obrazu na tablicę bajtów, która następnie zostaje przypisana do AttachmentContent, który jest tworzony jako pierwszy.

Następnie załącznik zostaje utworzony i połączony zarówno z AttachmentContent, jak i HierarchicalRequirement.

Wszystkie wydarzenia tworzenia działają świetnie. Obiekt treści zostanie utworzony poprawnie. Następnie nowy załącznik o nazwie „Image.png” zostanie utworzony i połączony z historią. Ale kiedy ściągam wynikowy załącznik z Rally, Image.png ma zero bajtów! Próbowałem tego z różnymi obrazami, plikami JPEG, PNG itp. Z tymi samymi wynikami.

Fragment kodu pokazującego nasz proces znajduje się poniżej. Czy jest coś oczywistego, czego mi brakuje? Z góry dziękuję.

    // .... 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;
    }
}

questionAnswers(1)

yourAnswerToTheQuestion