Sto utilizzando l'interfaccia IErrorHandler WCF per intercettare e registrare gli errori sul lato server di un servizio WCF. Tuttavia, la StackTrace dell'eccezione passato a HandleError e ProvideFault è incasinato:Come ottenere lo stack Eccezione accurato nell'operazione basata su attività WCF
a System.ServiceModel.Dispatcher.TaskMethodInvoker.InvokeEnd (Object esempio, Object [] & uscite, risultato IAsyncResult) al sistema .ServiceModel.Dispatcher.DispatchOperationRuntime.InvokeEnd (MessageRpc & RPC) a System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage7 (MessageRpc & RPC) .... molto altro ancora
Non sono sorpreso di vedere i metodi di Dispatcher casuali nello stack trace, ma ho pensato che avrei visto il mio metodo in cima allo stack.
ho deciso che questo avviene solo sulle operazioni che sembrano
[OperationContract]
public Task<int> MyOperation()
{
throw new ApplicationException("test");
}
servizi che assomigliano a questo avere una corretta analisi dello stack per me di fare il login:
[OperationContract]
public int MySyncOperation()
{
throw new ApplicationException("test");
}
Come una cronaca, ecco come sono i metodi del gestore degli errori:
public class MyErrorHandler : IErrorHandler
{
public bool HandleError(Exception error)
{
//variable 'error' has wrong stack trace if exception sourced from Task<int> operation
return false;
}
public void ProvideFault(Exception error, MessageVersion version, ref Message fault)
{
//variable 'error' has wrong stack trace if exception sourced from Task<int> operation
}
}
Si noti che il tipo di eccezione e il messaggio ar E corretto, quindi è come se stessero erroneamente rilanciando la mia eccezione da qualche parte con un "lancio ex" piuttosto che un semplice "lancio";
C'è un modo per ottenere la traccia dello stack corretta dell'eccezione da uno dei metodi IErrorHandler?
Hai mai trovato una soluzione per questo? –
sfortunatamente no. Non è la fine del mondo, dal momento che il tipo di eccezione e il messaggio sono preservati, e spero che frammenti separati di registrazione che stanno accadendo nell'app mi aiutino a triangolare dove si è verificato l'errore. Non sono ancora andato in diretta, quindi non ho la chiara idea di quanto sarà efficace nella pratica – Clyde
Inoltre, la mia app non avrà mai errori, quindi è un problema di odio ;-) – Clyde