web-services - 如何从 ASMX Web 服务返回 HTTPResponse 到消费者网页

标签 web-services download httpresponse

我正在开发 ASMX Web 服务;尝试创建一个方法,从服务器下载文档并在浏览器中显示该文档(调用 .aspx 网页)。我的服务构建没有错误,但当我尝试在代理类项目中“添加 Web 引用”时出现以下错误:

System.Web.HttpResponse 无法序列化,因为它没有无参数构造函数。

以下是 .ASMX 文件中的代码片段:

public class FileService : System.Web.Services.WebService
{
    [WebMethod]
    public void DownloadDocument(string URI, HttpResponse httpResponse)
    {
        int DownloadChunkSize = (int)Properties.Settings.Default.DownloadChunkSize;
        // some more code here....
        using (httpResponse.OutputStream)
        {
            // more code here...
        }
    }
}

我发现我对如何将 HttpResponse 从 Web 服务发送回请求网页感到困惑。有人可以给我一个关于如何执行此操作的提示吗?谢谢。

最佳答案

您应该研究 Web 处理程序 (.ashx)。它们非常适合您想要实现的目标。

例如:

public class Download : IHttpHandler, IRequiresSessionState {

    public void ProcessRequest(HttpContext context) {
        var pdfBytes = /* load the file here */
        context.Response.ContentType = @"Application/pdf";
        context.Response.BinaryWrite(pdfBytes);
        context.Response.End();
    }
}

更新: ashx 处理程序实际上是 aspx 的替代品。基本上,它没有 UI,但仍然像 aspx 页面一样处理 get/post 请求。重点是当您需要做的只是返回一些简单的内容(如文件...)或执行快速操作时,减少运行常规 aspx 页面所产生的开销。

IRequiresSessionState 接口(interface)允许您像站点中的任何其他页面一样使用 SESSION 对象。如果您不需要它,请将其关闭。

This site关于如何创建一个有趣的演练。忽略第 4 步,因为您可能不关心它。

假设您有一个常规页面 (aspx),其中包含指向您的文档的链接:aspx 文件中的链接实际上直接指向您的 ashx 处理程序。例如:

<a href="/document.ashx?id=blah">Click Here</a>

然后,ashx 处理程序的 ProcessRequest 方法中的代码将执行所需的任何调用(例如与 DLL 对话)来定位文档,然后通过 context.Response.BinaryWrite 方法调用将其流式传输回浏览器。

关于web-services - 如何从 ASMX Web 服务返回 HTTPResponse 到消费者网页,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/632397/

相关文章:

java - 服务器端的R计算

web-services - 使用VBA连接到MS Access中的Web服务

download - 如何使用客户端 JScript 从注释下载附件?

javascript - Vue.js,下载后动态显示图像

ios - 如何从 JSON 响应中获取 userID 而 JSON 文本不是以数组或对象开头以及允许未设置片段的选项

browser - 使用 IIS 时如何避免进行多次 SSL 协商

web-services - 谷歌搜索 API

java - SOAP 里的${something}

php - 从codeigniter中的 Controller 下载excel文件

http - 用于登录成功/失败响应的正确 HTTP header ?