【问题标题】:How to call httphandler through jquery ajax in an aspx page?如何在aspx页面中通过jquery ajax调用httphandler?
【发布时间】:2013-06-26 19:49:07
【问题描述】:

我有调用 wcf 服务的自定义 httphandler。按服务返回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 处理程序,并在图像标签中显示流,以避免在页面上回发。

谢谢。

【问题讨论】:

    标签: c# asp.net wcf jquery httphandler


    【解决方案1】:

    我认为您不需要使用 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;
        }
       }
    }
    

    【讨论】:

    • 我们不需要使用 AJAX。但是,当我调用我的 http 处理程序时,我想避免每次在页面上回帖。我试过这个:` function GetImage() { var url = 'MyStreamHandler.ashx?w=' + 300 + '&h=' + 75; $("#div1").append($("")); } ` 它仍然会导致回发。
    • 抱歉格式错误。我尝试格式化代码,但我无法实现它
    • 没问题,您的输入是 type="submit",这将导致提交回页面。您可以更改类型或使用 jQuery 删除默认事件。
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多