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?

Foi útil?

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?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top