Веб-сервис Asp.net, возвращающий файл docx - PullRequest
1 голос
/ 08 ноября 2010

У меня есть некоторые данные XML.Я создал веб-сервис на основе мыла asp.net, который принимает xml в качестве байтового буфера, применяет к нему преобразование xsl и преобразует его в файл docx.Но когда я возвращаю файл docx, используя объект ответа, я получаю сообщение об ошибке, что клиент нашел ответ типа application / vnd-word, но ожидал text / xml.

Фрагмент службы для отправки файла документа после преобразования xsl

Context.Response.Clear ();

Context.Response.ClearHeaders ();

Context.Response.ContentType = "application / vnd.openxmlformats- officedocument.wordprocessingml.document";

Context.Response.AddHeader ("Content-Disposition", "attachment; filename =" + "test.docx");Context.Response.Flush ();

Context.Response.End ();

Ответы [ 3 ]

1 голос
/ 08 ноября 2010

Это через вызов веб-службы? Если вы звоните через прокси-клиент веб-сервиса, то он ожидает ответа SOAP, а не двоичного потока. Вам нужно смоделировать SOAP-совместимый ответ, который может понять вызывающий абонент.

Установка типа контента и расположения контента позволяет браузеру делать «правильные» вещи (т.е. открывать диалог сохранения файла), но пользовательские клиенты (httpwebclient, прокси-сервер веб-службы и т. Д.) Не имеют встроенного поведения - так что вам нужно будет добавить все, что отсутствует.

0 голосов
/ 08 ноября 2010
Context.Response.Clear();
Context.Response.ContentType = "application/msword"; 
Context.Response.AddHeader("Content-Type", "application/msword"); 
Context.Response.AddHeader("Content-Disposition", "attachment; filename=" + "test.docx"); 
Context.Response.End();
Context.Response.Flush();
0 голосов
/ 08 ноября 2010

Где вы на самом деле пишете данные?

о, и попробуйте это ... (если ваш .docx - это хорошо сформированный офисный файл openxml)

    Response.Clear();
    Response.ContentType = "application/msword";
    Response.AppendHeader("Content-Type", "application/msword");
    Response.AppendHeader("Content-disposition", String.Format("attachment; filename={0}", FileName));
    Response.BinaryWrite(DataBytes);
    Response.End();

    Response.Flush();
...