1

我有一个 ASP.NET 页面,我在其中呈现一些 HTML 标记,其中包括由另一个 asp.net 页面生成的条形码图像

 <div id='divDynamic'>
   <h1>Some content</h1>
   <img src='barcode.aspx?mode=something' />
 </div>

在barcode.aspx.cs中,我有:

 protected void Page_Load(object sender, EventArgs e)
 {
    Response.CacheControl = "no-cache"; 
    Response.AddHeader("Pragma", "no-cache");
    Response.Expires = -1 ; 
    Response.Buffer = false;
    Response.ContentType = "image/JPEG";
    MemoryStream ms = new MemoryStream();    

    System.Drawing.Image objBitmap = GenCode128.Code128Rendering.MakeBarcodeImage(Request.QueryString["mode"] + "", 2,false );
    objBitmap.Save(ms ,ImageFormat.Bmp); 

    Response.BinaryWrite(ms.GetBuffer());
    Response.End();
}

我需要在许多类似的网站中使用相同的功能。所以现在我正在尝试将其转换为 WCF 服务,其中将生成 div“divDynamic”的标记并将其发送回客户端(一个 asp.net 网站)。我的服务有一个返回类型字符串的方法,它将返回 HTMLMarkup,如下所示

 public string GetUSPSLabelMarkup()
 {
        StringBuilder strHtml = new StringBuilder();
        strHtml.Append("<h1>Some content</h1>");
        // How do I have the barcode image here?

        return strHtml.ToString();

    }

我想知道我应该如何在我的服务中使用上述方法中的图像生成部分?我相信 Response.BinaryWrite 不应该在这里工作。

4

2 回答 2

2

如果您发送回 HTML,这意味着消费者也可以理解 IMG 标签,所以您为什么不发送这个:

 strHtml.Append("<h1>Some content</h1>");
 strHtml.Append("<img src='barcode.aspx?mode=something' />");

这有什么问题?

PS:您可以像这样简化流代码(无需创建会慢慢杀死服务器堆的内存流和字节数组):

protected void Page_Load(object sender, EventArgs e)
 {
    Response.ContentType = "image/JPEG";
    System.Drawing.Image objBitmap = GenCode128.Code128Rendering.MakeBarcodeImage(Request.QueryString["mode"] + "", 2,false );
    objBitmap.Save(Response.OutputStream, ImageFormat.Bmp); 
}

此外,请确保 contentType 和 ImageFormat 之间具有一致性(您在其中一个声明 JPEG,在另一个声明 BMP)。

于 2010-12-09T15:08:23.043 回答
1

我认为那里存在概念上的错误。

即使在 WCF 中,您仍然会有两个单独的调用:

  • <img>客户端使用引用加载 HTML 标记
  • 客户端从服务器加载二进制图像数据

因此,您将在 WCF-Service 上有两种方法:string GetUSPSLabelMarkup()byte() GetUSPSLabelImageData().

于 2010-12-09T15:22:43.970 回答