バイト配列のコレクションの形で未知の量のイメージを返すWebサービスを呼び出しています。 (私はこれを変更することはできません)バイト配列から派生したイメージをページ上に動的に表示する
それぞれの画像を単一のaspxウェブページに表示する必要があります。
現在、Microsoft.Web.GeneratedImageコントロールを使用しています。 http://www.codeplex.com/aspnet/Release/ProjectReleases.aspx?ReleaseId=16449 画像を表示する。
問題は、コントロールが画像コンテンツを読み込むために別のコードファイルを呼び出すため、セッション状態を使用してbytearrayを保存していることです。これはあまり幸せではありません。
ここに私のテストプロジェクトのコードがあります。
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
これを達成するための最もエレガントな方法は何ですか?
任意の入力歓迎!!!
EDIT:追加情報;
- Webサービスからのイメージは、SQL Reporting Servicesからの です。
- 通常、画像は常に になります(実際にはキャッシングの必要はありません。 )。
- 画像はユーザー固有のものです。
- Webサービスは1ページにつき1回しか呼び出されません。私は実際に生成 画像後 セッション状態から画像を廃棄してい
- 画像が しばらく再び見られることを を必要とされないので、それを使用しています。
ああ、IE <8号問題は私を気にしなかった。 – GordonB
うまく機能しています.... IEの唯一の問題は、データURIのサイズ制限です。 Convert.ToBase64String(imageToDisplay).Length <32768など – GordonB