Asp.net Webservice返回docx文件

时间:2010-11-08 15:14:59

标签: asp.net web-services docx

我有一些xml数据。我已经制作了一个基于asp.net soap的webservice,它将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 个答案:

答案 0 :(得分:1)

这是通过网络服务电话吗?如果您通过Web服务代理客户端进行调用,那么它需要SOAP响应而不是二进制流。您需要为调用者可以理解的SOAP兼容响应建模。

设置内容类型和内容处置使浏览器能够执行“正确”操作(即打开文件保存对话框),但自定义客户端(httpwebclient,Web服务代理等)不会构建这些行为-in所以你需要添加遗漏的东西。

答案 1 :(得分:0)

你实际上在哪里写数据?

哦,试试这个......(如果你的.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();

答案 2 :(得分:0)

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();