An important aspect of service-centric systems (i.e. systems composed of services) is the ability to support service discovery at run-time in order to cope with unavailable or malfunctioning services. In this paper we present a framework that supports run-time service discovery. The central characteristic of this framework is the combination of components for monitoring the compliance of service-centric systems with requirements at run-time and components for discovering services at run-time. The framework uses the former components to detect violations of requirements at run-time and uses the specifications of the violated requirements to generate queries for discovering services that could substitute for malfunctioning services. It also uses queries derived from the process specification for service discovery. These queries incorporate both structural and behavioural aspects of the required services.