2

我有调用 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 处理程序,并在图像标签中显示流,以避免在页面上回发。

谢谢。

4

2 回答 2

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;
    }
   }
}
于 2013-06-26T20:59:56.077 回答
2

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

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

于 2013-06-26T21:03:19.220 回答