code: def try_binding(self):
          
          with self._lock:
              if self.services:
                  # We already are alive (not our first call)
                  # => we are updated through service events
                  return
  
              # Get all matching services
              refs = self._context.get_all_service_references(
                  self.requirement.specification, self.requirement.filter
              )
              if not refs:
                  # No match found
                  return
  
              results = []
              try:
                  # Bind all new reference
                  for reference in refs:
                      added = self.on_service_arrival(reference)
                      if added:
                          results.append(reference)
              except BundleException as ex:
                  # Get the logger for this instance
                  logger = logging.getLogger(
                      "-".join((self._ipopo_instance.name, "RequiresMap-Runtime"))
                  )
                  logger.debug("Error binding multiple references: %s", ex)
  
                  # Undo what has just been done, ignoring errors
                  for reference in results:
                      try:
                          self.on_service_departure(reference)
  
                      except BundleException as ex2:
                          logger.debug("Error cleaning up: %s", ex2)
  
                  del results[:]
                  raise
docs: Searches for the required service if needed
  
          :raise BundleException: Invalid ServiceReference found