どっとねっとふぁん

C# Tips And Samples
in 検索

23.ashxファイルでSessionオブジェクトを利用する

最新の投稿は、投稿日時: 06-23-2005, 4:56 午後 投稿者: ono です。スレッドには 0 件の返答があります。
投稿のソート: 前へ 次へ
  •  06-23-2005, 4:56 午後 69

    23.ashxファイルでSessionオブジェクトを利用する

    Web Tips22で作成したashxファイルですが、このままではSessionオブジェクトに格納した値を取り出すことができません。
    入力された内容によって画像を変更しようという場合、imgタグのsrc属性にクエリーストリングを追加するという方法もありますが、ここではashxファイルでSessionを取得できるようにしてみます。

    MyImage1.ashx
    -------------------------------------------------------
    <%@ WebHandler language="C#" class="MyImage" %>
    
    using System;
    using System.Web;
    using System.Drawing;
    using System.Drawing.Imaging;
    
    public class MyImage:IHttpHandler, System.Web.SessionState.IRequiresSessionState
    {
        public bool IsReusable
        {
            get
            {
                return(true);
            }
        }
    
        public void ProcessRequest(HttpContext context)
        {
            using(Bitmap bmp = new Bitmap(250, 50))
            using(Graphics g = Graphics.FromImage(bmp))
            {
                g.FillRectangle(Brushes.Blue, 0, 0, 250, 50);
    	    using(Font f = new Font("MS ゴシック", 20))
                {
                    string str = (string)context.Session["str"];
                    g.DrawString(str, f, Brushes.Yellow, 10, 10);
                }
                context.Response.ContentType = "image/JPEG";
                bmp.Save(context.Response.OutputStream,ImageFormat.Jpeg);
            }
        }
    }
    
    -------------------------------------------------------

    必要なことは、作成したクラスでSystem.Web.SessionState.IRequiresSessionStateインタフェースも継承させることだけです。
    これだけで、
      string str = (string)context.Session["str"];
    といった形でSessionオブジェクトから値を取り出すことが可能になります。

    このMyImage1.ashxファイルを呼び出すのは、以下のようなファイルになります。

    sample.aspx
    -------------------------------------------------------
    <%@ Page language="c#" %>
    <script runat="server">
    void button1_Click(Object sender, EventArgs e) 
    {
        Session["str"] = intxt.Text;
        Image Image1 = new Image();
        Image1.ImageUrl = "MyImage1.ashx";
        PlaceHolder1.Controls.Add(Image1);
    }
    </script>
    <html>
    <body>
    <form method="post" runat="server">
    <asp:Textbox id="intxt" runat="server"/>
    <asp:Button id="Button1" Text="画像作成" OnClick="button1_Click" runat="server"/>
    <br />
    </form>
    <asp:PlaceHolder id="PlaceHolder1" runat="server" /><br />
    </body>
    </html>
    
    -------------------------------------------------------

    テキストボックスに文字を入力してボタンをクリックすると、テキストボックスの下に画像が表示されます。
    このサンプルでは画像の大きさが固定なので、文字列が長いと途中で切れてしまいますが、そのあたりは工夫してみてください


    あおい情報システム株式会社
     小野修司(どっとねっとふぁん)
RSS ニュースフィードで参照
SkinName:iroha_CS2
Powered by Community Server, by Telligent Systems