In many practical applications, trade-offs involving non-functional attributes e.g., availability, performance play an important role in selecting component services in assembling a feasible composition, i.e., a composite service that achieves the desired functionality. We present TCP-Compose*, an algorithm for service composition that identifies, from a set of candidate solutions that achieve the desired functionality, a set of composite services that are non-dominated by any other candidate with respect to the user-specified qualitative preferences over non-functional attributes. We use TCP-net, a graphical modeling paradigm for representing and reasoning with qualitative preferences and importance. We propose a heuristic for estimating the preference ordering over the different choices at each stage in the composition to improve the efficiency of TCP-Compose*. We establish the conditions under which TCP-Compose* is guaranteed to generate a set of composite services that (a) achieve the desired functionality and (b) constitute a non-dominated set of solutions with respect to the user-specified preferences and tradeoffs over the non-functional attributes.