我想创建一个用于生成饼图的WCF Web服务。例如,我将两个数组传递给WCF Web服务,它将返回一个与传递的数组相对应的饼图。
这样的事情:
getPieChart(double[] yAxix, string[] xAxix ){
return Chart1.Series["Default"].Points.DataBindXY(xAxix, yAxix);
}
这可以实现吗?如果是,请帮助我使用代码来实现这个目标。
答案 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
不确定上述代码中的详细信息是否完全正确,但它应该给你一个想法。