ASPページベースの描画チュートリアルでは、内部のHttpHandlerの代わりに、カスタムASPページが使用されているので、グラフの描画方法を高度に制御できます。このメソッドを使用することにより、クライアントキャッシュ、サーバーキャッシュ、IIS のロギングを含む応答の管理をカスタマイズできます。
次のセクションでは、<IMG> タグとその引数の作成およびクライアント側にグラフのイメージを転送する<IMG> のソース属性を示すいくつかのイメージ描画メソッドの使用方法を説明します。このチュートリアルでは、簡単なプロジェクトを通じて、イメージ描画メソッドは詳細に説明されています。以下のコード例は、ASP ページの ImageRenderMethod プロパティを使用します。両方とも HTTPHandler に非常に類似しています。ただし、HTTPHandler エントリを web.config に追加する代わりに、指定した ASP ページを作成および追加して <IMG> タグのソース属性の URL 要求を処理する必要があります。
Visual Basic コードの書き方
| Visual Basic |
コードのコピー
|
|---|---|
Imports System
Imports System.Web
Imports System.Web.SessionState
Namespace AspPageSample
_
Public Class StreamResponse
Inherits System.Web.UI.Page
Private Sub Page_Load(sender As Object, e As System.EventArgs)
' イメージをこのページに転送する方法を決定します。
Dim ses As String = Request("SessionID") ' セッション転送の場合は非 Null 値。
Dim cac As String = Request("CacheID") ' キャッシュの転送の場合は非 Null 値。
Dim del As String = Request("Delete") ' 削除要求の場合は非 Null 値。
Dim doDelete As Boolean = False
' 削除要求ステータスをチェックします。
If Not (del Is Nothing) Then
del = del.ToLower()
doDelete = del = "t" Or del = "true"
End If
Dim image As Byte() = Nothing
Dim imgtype As String = String.Empty
Dim img As String = String.Empty
Dim hsh As String = String.Empty
If Not (ses Is Nothing) Then
' セッションオブジェクトからイメージ情報を抽出します。
img = ses + "_ImageBytes"
hsh = ses + "_Hash"
image = CType(Session(img), Byte())
imgtype = CStr(Session(hsh))
If doDelete Then
Session.Remove(img)
Session.Remove(hsh)
End If
Else
If Not (cac Is Nothing) Then
' アプリケーションキャッシュからイメージ情報を抽出します。
img = cac + "_ImageBytes"
hsh = cac + "_Hash"
image = CType(Cache(img), Byte())
imgtype = CStr(Cache(hsh))
If doDelete Then
Cache.Remove(img)
Cache.Remove(hsh)
End If
End If
End If
If Not (image Is Nothing) And Not (imgtype Is Nothing) Then
' バイナリイメージをクライアントに返します。
imgtype = "image/" + imgtype.Substring((imgtype.LastIndexOf("."c) + 1))
Response.Clear()
Response.Cache.SetExpires(DateTime.MinValue) ' クライアントキャッシュを消去します。
Response.ContentType = imgtype
Response.BinaryWrite(image)
Response.Flush()
End If
End Sub 'Page_Load
End Class 'StreamResponse
End Namespace 'AspPageSample
|
|
C# コードの書き方
| C# |
コードのコピー
|
|---|---|
using System;
using System.Web;
using System.Web.SessionState;
namespace AspPageSample
{
public class StreamResponse : System.Web.UI.Page
{
private void Page_Load(object sender,
System.EventArgs e)
{
// イメージをこのページに転送する
// 方法を決定します。
string ses = Request["SessionID"];
// セッション転送の場合は非 Null 値。
string cac = Request["CacheID"];
// キャッシュの転送の場合は非 Null 値。
string del = Request["Delete"];
// 削除要求の場合は非 Null 値。
bool doDelete = false;
// 削除要求ステータスをチェックします。
if (del != null)
{
del = del.ToLower();
doDelete = (del == "t" || del == "true");
}
byte[] image = null;
string imgtype = string.Empty;
string img = string.Empty;
string hsh = string.Empty;
if (ses != null)
{
// セッションオブジェクトからイメージ情報を抽出します。
img = ses + "_ImageBytes";
hsh = ses + "_Hash";
image = (byte[])Session[img];
imgtype = (string)Session[hsh];
if (doDelete)
{
Session.Remove(img);
Session.Remove(hsh);
}
}
else if (cac != null)
{
// アプリケーションキャッシュからイメージ情報を抽出します。
img = cac + "_ImageBytes";
hsh = cac + "_Hash";
image = (byte[])Cache[img];
imgtype = (string)Cache[hsh];
if (doDelete)
{
Cache.Remove(img);
Cache.Remove(hsh);
}
}
// バイナリイメージをクライアントに返します。
if (image != null && imgtype != null)
{
int iext = imgtype.LastIndexOf('.') + 1;
imgtype = "image/" +
imgtype.Substring(iext);
Response.Clear();
Response.Cache.SetExpires(DateTime.MinValue);
// クライアントキャッシュを消去します。
Response.ContentType = imgtype;
Response.BinaryWrite(image);
Response.Flush();
}
}
}
}
|
|