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();
}

多くの同様のWebサイトで同じ機能を使用する必要があります。そこで、これをWCFサービスに変換しようとしています。このサービスでは、div "divDynamic"のマークアップが生成され、クライアント(asp.net Webサイト)に返送されます。私のサービスには、次のように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 でも、2 つの別個の呼び出しが存在します。

  • <img>クライアントは参照を含む HTML マークアップを読み込みます
  • クライアントはサーバーからバイナリ イメージ データを読み込みます

したがって、WCF サービスには と の 2 つのメソッドがstring GetUSPSLabelMarkup()ありbyte() GetUSPSLabelImageData()ます。

于 2010-12-09T15:22:43.970 に答える