如何在aspx页面中通过jquery ajax调用httphandler?

时间:2013-06-26 19:49:07

标签: c# asp.net wcf jquery httphandler

我有自定义的httphandler,它调用wcf服务。按服务返回Stream

[OperationContract]
Stream GetMyStream(int width, int height);

我从图像标记中调用我的aspx页面中的http处理程序:

<asp:Image ID="imgStream" runat="server" ImageUrl="MyStreamHandler.ashx" Visible="true" />

在我的处理程序中,我有一个对WCF服务的引用,我正在调用如下操作:

MyServiceClient tcpClient = new MyServiceClient();
Image img = Image.FromStream(tcpClient.GetMyStream(30,100));

我在我的服务中使用NetTcp绑定。现在,我可以通过jquery ajax在我的aspx页面中调用http处理程序,并在图像标记中显示流,以避免页面上的回发。

感谢。

2 个答案:

答案 0 :(得分:2)

我认为您不需要使用ajax,您可以使用下面的内容并添加图像引用以指向src中的处理程序。

请注意图片类型需要与您的图片相匹配。

public class MyStreamHandler : IHttpHandler {

public void ProcessRequest (HttpContext context) {

    MyServiceClient tcpClient = new MyServiceClient();
    Image img = Image.FromStream(tcpClient.GetMyStream(30,100));
    img.Save(context.Response.OutputStream, System.Drawing.Imaging.ImageFormat.Jpeg)  
        img.Dispose()
    }

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

答案 1 :(得分:2)

您应该使用IIS的本机文件处理程序来返回图像文件的内容,而不是通过托管代码运行流。虽然hutchonoid的答案有效,但我想指出最终结果的可扩展性可能较低,因为它将流写入内存中的Image对象,然后通过响应流将其发回。

它可能对大多数工作负载都很好,只是说它实际上不太优雅的解决方案,即使它更难实现。如果有的话,如果它上传到某个CDN然后返回到该资源的图像路径而不是通过httphandler提供服务,那么您的服务可能是最好的。