1

我有一些 xml 数据。我制作了一个基于 asp.net soap 的 web 服务,它将 xml 作为字节缓冲区应用 xsl 转换并将其转换为 docx 文件。但是,当我使用响应对象返回 docx 文件时,我收到一个错误,客户端找到类型为 application/vnd-word 的响应,但它期待的是 text/xml。

服务片段在 xsl 转换后推送文档文件

上下文.响应.清除();

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

4

3 回答 3

1

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

设置 content-type 和 content-disposition 使浏览器能够做“正确”的事情(即打开文件保存对话框),但自定义客户端(httpwebclient、Web 服务代理等)没有内置这些​​行为,所以您将需要添加缺少的任何内容。

于 2010-11-08T15:23:34.267 回答
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();
于 2010-11-08T16:47:19.790 回答
0

您实际上在哪里写入数据?

哦,试试这个……(如果你的 .docx 是格式良好的 office 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();
于 2010-11-08T16:16:54.157 回答