In this paper we describe a framework that supports runtime service discovery in both pull and push modes. Our framework supports service discovery based on structural and behavioural models of services and applications, as well as quality and contextual constraints. In the approach, we use a proactive push mechanism in which services are identified in parallel to the execution of the system based on subscriptions of services and queries. A prototype tool has been implemented in order to illustrate and evaluate the framework.