none
Erro de WCF + MSDTC + Exceptions RRS feed

  • Pergunta

  • Pessoal, 

    Meu problema é um pouco mais analítico. Eu tenho um Serviço WCF, que aceita uma Lista de requisições e responde uma lista também.

    Se eu mandei 10 na lista da requisição. Meu serviço pode retornar no máximo 10 respostas. Se der 3 erros. Eu retorno 7 respostas. Estou apenas explicando de forma genérica do que se trata, agora vamos lá:

    Dentro do método do serviço eu tenho um Foreach, que equivale as requisições. Dentro do foreach eu tenho um bloco try catch que engloba todo o código do foreach que a primeira linha é uma declaração do TransactionScope.

    Quando ocorre um erro eu dou dispose na conexão do TransactionScope. Se funcionar eu adiciono na minha lista de respostas.

    Mas tem uma questão: Quando dá algum erro eu lanço uma exception, e o método vai até o final. Eu consigo até dar um Quick Watch na lista. Porém no cliente aparece o erro:

    "transaction under which this method call was executing was asynchronously aborted"

    Percebi que isso acontecia sempre que tinha alguma exception envolvida. Mudei toda a minha estrutura para analisar com booleanos ao invés de Exception. E funcionou!!!

    Então minha pergunta é: Lançar qualquer exceção dentro de um serviço WCF que usa MSDTC mesmo que seja apenas internamente, ele acaba lançando exception para o cliente? Isso é uma caracteristica no WCF Ou eu tenho um erro no meu código?

    Não acho que tenha erros no código porque dentro do método ele prossegue normalmente e eu consigo ver a resposta, só quando o cliente vai capturar a resposta eu recebo erro.

    Fico no aguardo pessoal.

    Muito Obrigado!

    segunda-feira, 23 de abril de 2012 19:56

Todas as Respostas

  • Olá,

    Sim, quando você lança uma exception ela desce até a última camada ou seja na interface do cliente.

    O que é certo. Observe que os Try Catchs devem ser implementados sim, mas na última camada, é uma forma de sanitizar o código, evitar trycatchs desnecessários é uma forma de preservar o código bem escrito e também de poder pegar toda stacktrace da exception na camada de apresentação.

    Lançar exceptions é usado em muitos casos, mas elas significam erros, se no seu caso são apenas tratamentos sugiro que continue com respostas booleanas.

    Boa sorte!


    É possível sim! Ponha isso na sua cabeça. É possível. "Steve Jobs"

    quarta-feira, 16 de maio de 2012 12:28