Marcelo,
A respeito das exceptions, jã vi uma abordagem interessante:. Envelopamento.
Imagine que toda mensagem de retorno fosse envelopada em uma mensagem genérica que contivesse as informações de gestão. Como, versão, avisos, depreciação, paralisação agendada.. etc.
Quando vi achei mt interessante.
Me veio a cabeça agora a possibilidade de se ter um serviço exclusivo para informações de estado de outros serviços. Algo que pudesse começar a alarmar uma mudança, informando um endereço para maiores informações e que pudesse ser requisitado pelos clientes periodicamente.
A respeito das características do contrato, concordo que a menor mudança em um contrato faz com que o serviço seja novo, no entanto, não é absurdo pensarmos em mudanças que não ferem o comportamento da versão anterior, só enriquecem o contrato, de entrada e/ou saída. Para estes casos, uma camada de abstração poderia eliminar o versionamento do serviço, tendo apenas o versionamento do contrato (e implicitamente versionamento do endpoint). A conversão de contratos seria papel do ESB e clientes da v1 do serviço, nada muda, embora por baixo possa estar rodando a versão 2 ou 3 do serviço.