Как добавить вложение в пользовательскую историю с помощью Rally REST .NET
Мы в процессе переноса нашего кода .NET Rally из SOAP в REST .NET API. Пока что все хорошо, REST API кажется более быстрым и более простым в использовании, поскольку не существует WSDL для разбиения при каждом изменении пользовательских полей рабочего продукта в Rally Workspace.
Однако у меня возникли проблемы с одной вещью, поскольку мы пытаемся воспроизвести возможность загрузки вложений. Мы следуем очень похожей процедуре, описанной в этой публикации:
Rally SOAP API - Как добавить вложение в иерархическое требование
В результате изображение считывается в System.Drawing.Image. Мы используем функцию ImageToByteArray для преобразования изображения в байтовый массив, который затем присваивается AttachmentContent, который создается первым.
Затем вложение создается и подключается как к AttachmentContent, так и к HierarchicalRequirement.
Все события творения работают отлично. Объект контента создается отлично. Затем новое вложение под названием & quot; Image.png & quot; создается и связывается с историей. Но когда я загружаю полученное вложение из Rally, Image.png имеет ноль байтов! Я пробовал это с разными изображениями, JPEG, PNG и т. Д., Все с одинаковыми результатами.
Выдержка из кода, показывающего наш процесс, приведена ниже. Есть ли что-то очевидное, чего мне не хватает? Заранее спасибо.
// .... 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;
}
}