3

IHttpHandler を使用して Web サービスを呼び出し、結果の byte[] をダウンロードした添付ファイルとしてクライアントに返します。これは正常に動作しますが、IHttpHandler を IHttpAsyncHandler に変更しようとすると、ファイルのダウンロード ダイアログが表示されますが、ファイルのダウンロードが開始または終了しません。私は何を間違っていますか?

<%@ WebHandler Language="C#" Class="PreviewPDF"  %>

using System;
using System.Web;

public class PreviewPDF : IHttpAsyncHandler
{
    public void ProcessRequest(HttpContext context)
    {
    } 

    public IAsyncResult BeginProcessRequest(HttpContext context, AsyncCallback cb, Object extraData)
    {
        string data = "some data";

        using (WebService.RequestService service = new WebService.RequestService())
        {
            AsyncCallback callback = new AsyncCallback(EndProcessRequest);
            return service.BeginGetFile(data, callback, context);
        }
    }
    public void EndProcessRequest(IAsyncResult result)
    {
        HttpContext context = result.AsyncState as HttpContext;
        byte[] wsoutput;
        using (WebService.RequestService service = new WebService.RequestService())
        {
            wsoutput = service.EndGetFile(result);
        }

        context.Response.ContentType = "application/octet-stream";
        context.Response.ContentEncoding = System.Text.Encoding.Unicode;
        context.Response.AddHeader("Content-Disposition", "attachment; filename=attachment.pdf");
        using (System.IO.MemoryStream ms = new System.IO.MemoryStream(wsoutput))
        {
            ms.WriteTo(context.Response.OutputStream);
        }
        context.Response.Flush();
    }


    public bool IsReusable {
        get {
            return false;
        }
    }
}
4

1 に答える 1