Загрузить файл из HTML-формы (multipart / form-data) в службу WCF REST в виде потока без потоковой передачи входных данных всей формы?

В настоящее время у меня возникла проблема при загрузке файла из HTML в мою службу отдыха (WCF REST). При загрузке файла я хотел бы отправить информацию, такую как заголовок и описание, вместе с содержанием файла.

Итак, я создал тестовую форму, как это:

<form id="testForm" action="http://localhost.:1576/NotepadService.svc/Note/91f6413c-4d72-42ca-a0f3-38df15759fc9/Attachment" method="POST" enctype="multipart/form-data">
        <table>
            <tr><td>Title:</td><td><input type="text" name="Title"></td></tr>
            <tr><td>Description:</td><td><input type="text" name="Description"></td></tr>
            <tr><td>Filename:</td><td><input type="text" name="Filename"></td></tr>
            <tr><td>File:</td><td><input type="file" name="Contents"></td></tr>
            <tr><td/><td><input type="submit" value="Send"></td></tr>
        </table>
    </form>

На стороне сервера, я хотел бы перевести его на этот метод:

[OperationContract]
        [WebInvoke(
            BodyStyle = WebMessageBodyStyle.Bare,
            Method = "POST",
            UriTemplate = "/Note/{noteId}/Attachment")]
        [Description("Add an attachment to a Note.")]
        void AddAttachmentToNote(string noteId, AttachmentRequestDto attachmentRequestDto);

С AttachmentRequestDto, определенным как

[DataContract]
    public class AttachmentRequestDto
    {
         [DataMember]
         public string Title { get; set; }
         [DataMember]
         public string Description { get; set; }
         [DataMember]
         public string Filename { get; set; }
         [DataMember]
         public Stream Contents { get; set; }
    }

Короче говоря, я бы хотел получить заголовок и описание в виде строковых значений, а содержимое файла - в виде потока. Это не похоже на работу, так как HTML-форма помещает все содержимое формы (а также заголовок и описание) в поток вместе с содержимым файла. Поэтому, определяя мой метод REST как

[OperationContract]
        [WebInvoke(
            BodyStyle = WebMessageBodyStyle.Bare,
            Method = "POST",
            UriTemplate = "/Note/{noteId}/Attachment")]
        [Description("Add an attachment to a Note.")]
        void AddAttachmentToNote(string noteId, Stream formContents);

работает, но затем мне нужно проанализировать поток, чтобы получить все мои данные (что не очень хороший подход по сравнению с тем, что я на самом деле хочу сделать).

Может быть, мне нужно определить 2 различных метода обслуживания, один из которых принимает только файл, а другой принимает данные файла? Это, однако, означало бы, что мои бизнес-правила (требуется заголовок + требуется содержимое файла) должны проверяться по-разному (так как REST не имеет состояния).

Кое-что, о чем стоит упомянуть: мне нужно сохранить содержимое файла в базе данных, а не в файловой системе.

Кто-нибудь имеет какой-либо вклад в этот? Я застрял на этом ...

Спасибо!

Ответы на вопрос(1)

Ваш ответ на вопрос