Diante de minha experiência, percebi que O WCF tem o comportamento de encapsular (se é assim que posso dizer) o erro original e nos enviar um erro genérico.
Mas com a ajuda do System.Diagnostics, podemos realizar o trace das chamadas do serviço e identificar o real problema. (Esta configuração pode ser adicionada tanto no client como no host do WCF.)
Adicione a configuração abaixo dentro da tag configuration do arquivo de configuração e realize a chamada que está retornando um erro.
<system.diagnostics>
<sources>
<source name="System.ServiceModel" switchValue="Verbose,ActivityTracing" propagateActivity="true">
<listeners>
<add type="System.Diagnostics.DefaultTraceListener" name="Default" />
<add name="xml" />
</listeners>
</source>
</sources>
<sharedListeners>
<add initializeData="c:\temp\WCFTrace.svclog"
type="System.Diagnostics.XmlWriterTraceListener" name="xml"
traceOutputOptions="LogicalOperationStack, DateTime, Timestamp, ProcessId, ThreadId, Callstack" />
</sharedListeners>
<trace autoflush="true" />
</system.diagnostics>
Com esta configuração, será gerado um arquivo com a extensão svclog (vide linha 11 da configuração). Esta extensão é conhecida pelo software Microsoft Service Trace Viewer que vem junto na suite do Microsoft Visual Studio 2010.
Ao abrir o arquivo svclog, o software (Trace Viewer) será aberto contendo na esquerda as atividades realizadas na chamada do serviço.
Procure alguma atividade que esteja na cor vermelha, que significa atividade com erros, e selecione.
No lado direito aparecerá uma lista com as ações feitas naquela atividade. Procure nesta lista os itens com a cor vermelha (erros) e selecione.
Ao selecionar, na parte inferior aparecerão os detalhes da ação selecionada, vá até a seção Exception e navegue pela Exception Tree até a última exception e verifique logo abaixo a mensagem original de erro.
ATENÇÃO: Não deixe esta configuração habilitada pois o arquivo gerado pode crescer rapidamente, visto que o trace realiza um append no arquivo.




0 comentários:
Postar um comentário