I should also add - it's quite common to use the WCF as a BL layer as well, with it returning entities. For example, a GetRecords() entities could return a List<Record> object. Now, it doesn't mean that Record has to sit in the WCF's project, it can be a class library that the project references. At the same time, the client project can also reference that class library. WCF is smart enough to know that when you reference the WCF service, whether the class being returned from a method is a known type or not.

This means that your client application will know that the type returned from the method is List<Record>, which it already knows about, so you can use it fully.

The reason it's preferable to use it to return entities rather than datasets is because it reduces the overhead. Datasets are big.