我想创建一个用于生成饼图的 WCF Web 服务。例如,我将两个数组传递给 WCF Web 服务,它会返回一个与传递的数组相对应的饼图。
像这样的东西:
getPieChart(double[] yAxix, string[] xAxix ){
return Chart1.Series["Default"].Points.DataBindXY(xAxix, yAxix);
}
这可以实现吗?如果是,请帮助我提供实现此目标的代码。
它可以实现,但前提是您从服务返回的类型是可序列化的。就您而言,我不确定,因为不确定您要返回的类型。
但是,我同意 Alex 在评论中的观点 - 您应该在 ASP.NET 组件的 Web 服务器上生成图表,或者让客户端浏览器使用某种图表组件生成它。
虽然不推荐,但如果您坚持这样做(即从 WCF 服务返回 UI 元素),我可能会通过 WCF 发送渲染图像。假设您正在使用System.Web.DataVisualization
命名空间中的图表,您可以使用该SaveImage
方法并通过 WCF 发送结果。客户端可以显示该图像。
根据您的绑定,您可能希望使用适合发送图像等内容的技术。对于 HTTP 绑定,您可能需要考虑使用MTOM 编码:
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
不确定上面代码中的细节是否完全正确,但它应该给你一个想法。