• 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;


  • 相关阅读:
    iOS开发快捷键
    通达信指标函数说明大全(2014)(转)
    windows下的wxWidgets环境配置
    Qt->数字格式化
    被称"硬盘杀手"的几个win7系统服务如何关闭(转)
    关闭系统索引(转)
    SSD固态硬盘优化(转)
    通达信的文件目录结构(转)
    Macdrive8破解版如何激活
    IOS6.0调用通讯录和之前的差别
  • 原文地址:https://www.cnblogs.com/larson/p/1983173.html
Copyright © 2020-2023  润新知