Muitas pessoas utilizam Datasets e, consequentemente, DataTables para representar sua estrutura de dados. Com isso, pode haver a necessidade de expor esse tipo de objeto através de serviços (WCF ou ASMX). Como o Dataset pode ser serializado em formato Xml, então podemos fazer uso dele nestes serviços.
O problema que há neste caso é que isso é uma má prática do ponto de vista de interoperabilidade e, em alguns casos, de performance. A estrutura Xml que representa o Dataset é complexa e difícil de ser representada em outras plataformas que não seja o próprio .NET. Além disso, devido também a complexidade dele, a tamanho do envelope SOAP fica muito maior em relação à arrays de objetos (DTOs). E, para finalizar, se voce utiliza o Dataset como estrutura dos dados na aplicação, voce pode indiretamente expor a sua estrutura interna para o mundo.
Sempre que possível opte pela utilização de classes que são desenhadas (exclusivamente ou não) para serem trocadas entre o serviço e os clientes. Já quando precisar retorna uma lista, opte pelos tradicionais arrays. Isso garantirá um payload muito mais leve e, além disso, irá garantir a interoperabilidade com as mais diversas plataformas.