Service discovery is an essential technique to provide applications with appropriate resources. However, user mobility and heterogeneous environments make the discovery of appropriate resources difficult. The execution environments will be rapidly changed, so developers cannot predict available resources exactly in design time. Thus, service discovery frameworks for pervasive computing must guarantee transparent development environments to application developers. In this paper, we introduce how to semantically describe and discover a variety of services in different environments. This approach helps applications to find appropriate services even though the required ones are not available or not found. For this, we propose a fine-grained effect ontology which is used to reasonably evaluate functional similarity among different services, and a policy-based query coordination which is used to dynamically apply different resource constraints according to human activities. Finally, we show with a feasible scenario how to find appropriate services in different environments. Our approach helps applications to seamlessly perform their tasks across a dynamic range of environments.