Quando é o último momento eu posso retornar uma exceção para um cliente no WCF?
-
05-09-2019 - |
Pergunta
Vamos dizer que eu tenho isso em uma implementação de IInstanceProvider:
public void ReleaseInstance(InstanceContext instanceContext, object instance)
{
try
{
unitOfWork.Commit();
}
catch (Exception)
{
unitOfWork.Rollback();
throw;
}
finally
{
unitOfWork.Dispose();
}
}
Isso lance; nunca será devolvido ao cliente porque ele está sendo chamado depois que o serviço tem feito é trabalho e retornou dados para o cliente e, portanto, está feito. De que outra forma eu posso retornar a exceção? Ou há um lugar melhor para fazer isso?
Solução
Eu acho que você está procurando no lugar errado para fazer isso. Eu acho que a melhor opção seria a de implementar a interface IDispatchMessageInspector e anexá-lo à coleção exposta pela propriedade MessageInspectors na DispatchRuntime (através de um comportamento, mais provável).
Com isso, você pode inspecionar mensagens entrando e saindo, e modificá-los em caso de necessidade (que é como sua exceção seria realizado, como uma falha na mensagem de retorno). Devido a isso, você não vai apenas deixar a bolha exceção, mas sim, você iria mudá-lo a uma mensagem de falha e definir a mensagem de retorno para isso.
Outras dicas
Eu não sou tão familiarizado com transações em WCF como eu deveria ser. O que no código acima retorna os resultados para o cliente? É a reversão?