我正在調用一個webservice,它以字節數組的形式返回未知數量的圖像。 (我不能改變這一點)在頁面上動態顯示從字節數組派生的圖像
我需要在一個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
什麼是實現這一目標的最優雅的方式?
任何輸入歡迎!
編輯:其他信息;
- 來自web服務的圖像是來自SQL Reporting Services的 。
- 圖像一般會變化 所有時間都在變化(沒有真正的 緩存要求)。
- 圖像將是用戶特定的。
- webservice每頁僅調用一次。
- 我從 會話狀態的產生 圖像後實際處置圖像的使用它,因爲不會 所需的圖像獲得 而再次觀看。
哦,IE <8的問題沒有打擾我。 – GordonB 2009-05-15 07:27:52
工作很好.... IE唯一的問題是數據uri的大小限制。 Convert.ToBase64String(imageToDisplay).Length <32768 etc等 – GordonB 2009-05-15 09:56:51