我正在尝试使用对Webservice的AJAX调用来构建图表的图像。我能够构建图表并将其转换为图像但由于某种原因我无法将图像恢复到我的AJAX调用。
看起来像这样的asp.net Web服务方法。
[WebMethod(EnableSession = true)]
public void getCandles(string Symbol)
{
Chart chrt = new Chart();
stockQuotes.bldChart(ref chrt); //// returns chart of candlesticks
bytes[] chartBytes;
using (var chartimage = new MemoryStream()) //// change chart to bytes
{
try
{
chrt.SaveImage(chartimage, ChartImageFormat.Png);
chartBytes = chartimage.GetBuffer();
}catch
{
return (null);
}
}
/// Transform to memory stream and finally to image
MemoryStream ms = new MemoryStream(chartImage);
Image img = Image.FromStream(ms)
/// Build respoonse
Context.Response.Clear();
Context.Response.ContentType = "image/png";
index._Stocks[Symbol].ChartImage.Save(Context.Response.OutputStream, System.Drawing.Imaging.ImageFormat.Png);
}
此方法由AJAX调用调用,如下所示:
function UpdatePriceChart()
{
var selectedSymbol = $("#ddlSymbols").val();
$.ajax({
url: "/WS/wsCandles.asmx/getCandles",
data: { "Symbol": $("#ddlSymbols").val() },
method: "post",
success: function (data) {
$('#chrtPrice').attr('src', data);
},
error: function (err) {
alert(err);
}
})
}
由于某种原因,返回的图像始终为空。任何人都可以引导我朝着正确的方向前进。谢谢你的帮助。
答案 0 :(得分:0)
在这种情况下,我通常会使用一个处理程序将图像直接返回到img
的src,例如,页面部分将类似于:
function UpdatePriceChart()
{
var selectedSymbol = $("#ddlSymbols").val();
$('#chrtPrice').attr('src', '/WS/wsCandles.ashx?symbol=' + selectedSymbol);
}
并且处理程序将类似于:
public void ProcessRequest (HttpContext Context)
{
Chart chrt = new Chart();
stockQuotes.bldChart(ref chrt); //// returns chart of candlesticks
bytes[] chartBytes;
using (var chartimage = new MemoryStream()) //// change chart to bytes
{
try
{
chrt.SaveImage(chartimage, ChartImageFormat.Png);
chartBytes = chartimage.GetBuffer();
}catch
{
return (null);
}
}
/// Transform to memory stream and finally to image
MemoryStream ms = new MemoryStream(chartImage);
Image img = Image.FromStream(ms)
/// Build respoonse
Context.Response.ContentType = "image/png";
index._Stocks[Symbol].ChartImage.Save(Context.Response.OutputStream, System.Drawing.Imaging.ImageFormat.Png);
}
您需要添加一些额外的代码来读取符号,并且可能会有一些额外的更改按预期工作,但这是个主意。