如何从WCF服务将表数据发送到客户端

时间:2014-05-19 19:24:38

标签: c# wcf

public DataTable Get_table_data()
    {
        DataTable dt = new DataTable();
        dt.Columns.Add("Id");
        dt.Columns.Add("user_name");
        dt.Columns.Add("user_email");
        dt.Columns.Add("status");
        dt.Columns.Add("Role");
        DataRow data_table_new_row = null;
        var rows = (from s in db.logins
                  where s.status == 1
                  select s);

        foreach (var r in rows)
        {
            data_table_new_row= dt.NewRow();
            dt.Rows.Add(r.Id,r.user_name,r.user_email,r.status,r.Role);
        }
        int c = dt.Rows.Count;
        return dt;
    }

我试图制作WCF应用程序。我想从表中获取所有表数据并将数据返回到客户端application.i已将linq数据转换为tabledata。但它给了我错误,wcf不支持这种类型的返回类型。

2 个答案:

答案 0 :(得分:1)

您可以将DataSet返回给客户端,在这种情况下,您只需要更新方法返回类型,将DataTable添加到DataSet,然后将其返回给客户端。

但是,DataSet不是WCF中数据传输的最佳选择。相反,尝试创建自己的自定义数据传输对象(DTO),从LINQ查询中对其进行水合,然后将DTO返回给调用者。

您可以在此处找到有关WCF DataContracts的更多信息:

http://msdn.microsoft.com/en-us/library/ms733127%28v=vs.110%29.aspx

这是一个假设的用户DTO:

[DataContract]
public class User
{
   [DataMember]
   public int Id {get;set;}
   [DataMember]
   public string UserName {get;set;}
   [DataMember]
   public string Password {get;set;}
}

我还建议将Request/Response pattern与WCF一起使用,在这种情况下,您还需要一个带有用户DTO列表的Response DTO:

[DataContract]
public class Response
{
   [DataMember]
   public bool Success {get;set;}
   [DataMember]   
   public string Message {get;set;}
   [DataMember]
   public List<User> Users {get;set;}
}

答案 1 :(得分:1)

通常不建议在WCF中返回DataTable。通过电线发送它是非常大和笨重的。它也不是最好的设计。

而是创建自己的类并将这些对象的List发送到客户端。

使用DataContractAttributeDataMemberAttribute定义您的课程:

[DataContract]
public class User
{
    [DataMember]
    public int Id { get; set; }
    [DataMember]
    public string UserName { get; set; }
    [DataMember]
    public string UserEmail { get; set; }
    [DataMember]
    public int Status { get; set; }
    [DataMember]
    public string Role { get; set; }
}

然后在foreach循环中填充List<User>集合,然后返回。

var listOfUser = new List<User>();
foreach (var r in rows)
{
    var user = new User();
    user.Id = r.Id;
    user.UserName = r.user_name;
    user.UserEmail = r.user_email;
    user.Status = r.status; 
    user.Role = r.Role;
    listOfUser.Add(user);
}
return listOfUser;