A resposta do SOAP é determinada pela definição do serviço (isto é, WSDL) fora da qual é comum usar apropriado Códigos de resposta HTTP para circunstâncias fora do "contrato".
Em vez de ser preguiçoso e usar 500, eu escolheria:
- 409 Conflito
- 410 Longe
- 417 Falha na expectativa
- 429 Solicitações demais
- 501 Não implementado
- 503 Serviço indisponível
- 509 Limite de largura de banda excedido
- 507 Armazenamento insuficiente
Revise a lista completa e escolha a mais adequada.
Se o servidor for capaz de retornar um documento XML detalhando o erro, é normal fazê-lo. Os serviços SOAP que eu uso têm isso permitido nas definições de serviço.
O cliente tem que ser capaz de lidar com erros HTTP sem enfeites, pois às vezes ocorre uma falha no servidor antes que o XML de solicitação seja analisado.