'The name of the service.
This defaults to the endpointPrefix defined in the service model.
However, this value can be overriden when a ``ServiceModel`` is
created.  If a service_name was not provided when the ``ServiceModel``
was created and if there is no endpointPrefix defined in the
service model, then an ``UndefinedModelAttributeError`` exception
will be raised.'

@CachedProperty
def service_name(self):

    if (self._service_name is not None):
        return self._service_name
    else:
        return self.endpoint_prefix
