バイト配列のコレクションの形式で未知の量の画像を返すWebサービスを呼び出しています。(これは変更できません)
各画像を単一のaspxWebページに表示する必要があります。
現在、Microsoft.Web.GeneratedImageコントロールを使用しています。 http://www.codeplex.com/aspnet/Release/ProjectReleases.aspx?ReleaseId=16449 を使用して、画像を表示します。
私が抱えている問題は、コントロールが画像コンテンツをロードするために別のコードファイルを呼び出すため、セッション状態を使用してバイト配列を格納していることです。これはあまり満足していません。
これが私のテストプロジェクトからのコードです。
Private Sub btnGetChart_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnGetChart.Click
Dim reportHub As New HubWrapper
Dim repCharts() As ReportHub.Chart = reportHub.ReportHubChart(Me.ddlReports.SelectedValue, ViewState("params"))
For Each chart As ReportHub.Chart In repCharts
Dim sessionKey As String = "img" & System.Guid.NewGuid().ToString
Dim imgParam As New Microsoft.Web.ImageParameter()
imgParam.Name = "sessionVar"
imgParam.Value = sessionKey
Session(sessionKey) = chart.ChartData
Dim img As New Microsoft.Web.GeneratedImage
img.ImageHandlerUrl = "~/chartImageHandler.ashx"
img.Parameters.Add(imgParam)
phChart.Controls.Add(img)
Next
End Sub
<%@ WebHandler Language="VB" Class="chartImageHandler" %>
Imports System
Imports System.Collections.Specialized
Imports System.Drawing
Imports System.Web
Imports Microsoft.Web
Public Class chartImageHandler
Inherits ImageHandler
Implements IRequiresSessionState
Public Sub New()
MyBase.New()
'Set caching settings and add image transformations here
'EnableServerCache = True
End Sub
Public Overrides Function GenerateImage(ByVal parameters As NameValueCollection) As ImageInfo
Dim byteArry As Byte() = CType(HttpContext.Current.Session(parameters("sessionVar")), Byte())
HttpContext.Current.Session.Remove(parameters("sessionVar"))
Return New ImageInfo(byteArry)
End Function
End Class
これを達成するための最もエレガントな方法は何ですか?
任意の入力を歓迎します!!!
編集:追加情報;
- Webサービスからの画像は、SQLReportingServicesからのものです。
- 通常、画像は常に変化します(実際のキャッシュ要件はありません)。
- 画像はユーザー固有です。
- Webサービスは、ページごとに1回だけ呼び出されます。
- しばらくの間、画像を再度表示する必要がないため、生成された画像が使用した後、実際にセッション状態から画像を破棄しています。