从服务返回饼图

时间:2012-09-17 07:39:08

标签: asp.net wcf

我想创建一个用于生成饼图的WCF Web服务。例如,我将两个数组传递给WCF Web服务,它将返回一个与传递的数组相对应的饼图。

这样的事情:

getPieChart(double[] yAxix, string[] xAxix ){
  return Chart1.Series["Default"].Points.DataBindXY(xAxix, yAxix);
}

这可以实现吗?如果是,请帮助我使用代码来实现这个目标。

2 个答案:

答案 0 :(得分:2)

可以实现,但仅当您从服务中返回的类型为serializable时。在你的情况下,我不确定,因为你不确定你要返回什么类型。

HOWEVER ,我同意评论中的Alex - 您应该在ASP.NET组件中的Web服务器上生成图表,或让客户端浏览器使用某种图表组件生成图表。

答案 1 :(得分:1)

虽然不推荐,但如果你坚持这样做(即从WCF服务返回UI元素),我可能会通过WCF发送渲染的图像。假设您正在使用System.Web.DataVisualization命名空间中的图表,您可以使用SaveImage方法并通过WCF发送结果。客户端可以显示该图像。

根据您的绑定,您可能希望使用适合发送图像等内容的技术。使用HTTP绑定时,您可能需要考虑使用MTOM encoding

  

MTOM是一种使用SOAP消息作为原始字节传输大型二进制附件的机制,允许较小的消息。

您的操作可能如下所示:

public bool GetChart(object series, out byte[] chartBytes)
{
    var chart = CreateCoolChart(series);
    MemoryStream ms = new MemoryStream();
    chart.SaveImage(ms);
    chartBytes = ms.ToArray();
    return true; // Success!
}

客户端将有一些像这样的代码(伪代码):

object series = GetSeriesFromSomeLocation();
byte[] chartBytes;
proxy.GetChart(series, out chartBytes);
// Construct an Image object based on the chartBytes, using a stream
// Show the image in your UI control

不确定上述代码中的详细信息是否完全正确,但它应该给你一个想法。