从webservice返回datatable或xml?

从webservice返回datatable或xml?,xml,web-services,datatable,dataset,asmx,Xml,Web Services,Datatable,Dataset,Asmx,我正在设计一个C#webservice,但我不确定输出单个客户记录的最佳实践是什么 目前它返回一个DataTable(它工作得很好),但这是“正常”方法,还是我应该使用DataRow、DataSet还是简单地构造一个普通的旧XML输出。根据我使用C#webservices的经验,将DataTable返回到前端是相当标准的做法 如果要返回单个记录,则不需要XML。一切都取决于所需的客户端,有些返回类型并非在所有设备上都可用,因此我尝试始终返回自定义类 但是,如果您的终端能够很好地使用datatab

我正在设计一个C#webservice,但我不确定输出单个客户记录的最佳实践是什么

目前它返回一个DataTable(它工作得很好),但这是“正常”方法,还是我应该使用DataRow、DataSet还是简单地构造一个普通的旧XML输出。

根据我使用C#webservices的经验,将DataTable返回到前端是相当标准的做法


如果要返回单个记录,则不需要XML。

一切都取决于所需的客户端,有些返回类型并非在所有设备上都可用,因此我尝试始终返回自定义类


但是,如果您的终端能够很好地使用datatables,那么请使用它。我认为datatables是许多生产代码中的返回类型。Web服务在理想情况下是与平台无关的。通常,返回
DataTable
或其他特定于.NET的类型不是最佳做法。您的客户可能无法与他们打交道

如果你只是退回一个客户,那么就退回它。如果要返回客户列表,则只需返回该列表:

[OperationContract]
public Customer GetCustomer(int id);

[OperationContract]
public IEnumerable<Customer> GetAllCustomers();
[运营合同]
公共客户GetCustomer(int-id);
[经营合同]
公共IEnumerable GetAllCustomers();

WCF将以允许您的客户处理退货的方式对此进行适当序列化。

(它工作得非常好),“那么现在您想打破它吗?顺便问一下,这是WCF服务,还是传统的ASMX服务?@John它目前是ASMX,但在发布此消息后,我认为我应该使用WCF。嗯,我以前不知道WCF。我昨天花了很多时间思考,现在我应该放弃ASMX方法。出于好奇:为什么你甚至考虑ASMX?你是被搜索结果引导的吗?只是经验有限——我从2008年起就没有写过网络服务,我也不知道这项技术已经在进步。我现在明白了我可以取消DataTable方法,但我现在想知道是否应该返回客户类型或普通XML。只有我在使用这项服务,但我想用“正确的方式”而不是“让它工作”。是否有最佳实践,还是取决于个人偏好谢谢。返回客户类型(或您喜欢的任何数据合同类型)。WCF将为您序列化它,几乎所有客户端都可以使用它。数据契约的好处在于,因为它们是对要序列化的内容的高级描述,所以WCF更有可能对其进行序列化,以便任何客户端都可以接收它。这与XML序列化相反,XML序列化使您能够灵活地攻击自己。