WCF向客户端返回DataTable报错

WCF定义的服务方法的返回值会经过序列化,因此服务向客户端返回DataTable会传回许多无用的数据信息(相比返回单纯的数据),这里不考虑这些方面的问题。

这篇文章只是记录我使用服务返回DataTable时出现的错误的原因及解决办法。

1 public DataTable GetValueScaleData(string field,params double[][] sections)
2 {
3 DXOilDataModel dataModel = new DXOilDataModel();
4 DataTable table = new DataTable();
5 table.Columns.Add("Counts", typeof(double));
6 table.Columns.Add("QtyTD", typeof(double));
7 table.Columns.Add("MinValue", typeof(double));
8 table.Columns.Add("MaxValue", typeof(double));
9 if (sections != null && sections.Length > 0)
10 {
11 foreach (double[] section in sections.ToList<double[]>())
12 {
13 DataTable tbTmp = new DataTable();
14 if (null != section && section.Length > 1)
15 {
16 tbTmp = dataModel.GetValueScaleData(string.Format("{0} > {1} and {0} <={2} ", field, section[0], section[1]), field);
17 }
18 tbTmp.Columns.Add("MinValue", typeof(double));
19 tbTmp.Columns.Add("MaxValue", typeof(double));
20 if (null != tbTmp && tbTmp.Rows.Count > 0)
21 {
22 foreach (DataRow row in tbTmp.Rows)
23 {
24 row["MinValue"] = section[0];
25 row["MaxValue"] = section[1];
26
27 DataRow nRow = table.NewRow();
28 nRow.ItemArray = row.ItemArray;
29 table.Rows.Add(nRow);
30 }
31 }
32 }
33
34 }
35
36 return table;
37 }

如上代码是我的服务实现代码,客户端调用该服务方法时会报错(类似以下):

“服务'...svc'关闭连接,可能是配置中没有使用http协议....”。

出现这一问题的根本原因是返回的DataTable是没有TableName的,只要在return table;前加入这一句客户端就可以正常调用该服务方法了:table.TableName = "tbName";

或者不返回DataTable而是返回DataSet同样也可以解决问题,代码如下:

DataSet ds = new DataSet();
            ds.Tables.Add(table);
 
            return ds;


原文地址:https://www.cnblogs.com/larson/p/1983173.html