Possiedo un servizio Web API Web ASP.NET che genera una SerializationException in determinate circostanze. Il problema è che non sono in grado di intercettare e registrare questa eccezione sul lato server: l'unico posto in cui si trova è nel corpo della risposta HTTP al client.Come intrappolare un SerializationException in Web API?
Ho registrato un ExceptionFilterAttribute
come descritto in e verificato che funzioni correttamente quando lancio un'eccezione nel mio controller. Sfortunatamente la SerializationException viene lanciata durante la risposta (dopo il controller) e sembra essere completamente inghiottita da ASP.NET. Ho anche provato ad agganciare Application_Error()
in Global.asax.cs ma non è nemmeno apparso lì.
Come posso rilevare eccezioni SerializationException durante la risposta dell'API Web?
Perfetto! Leggera ottimizzazione, ho reso la mia azione asincrona e atteso LoadIntoBufferAsync in modo da non bloccare il thread. – Mike
@Mike È probabile che LoadIntoBufferAsync stia spostando solo byte in memoria durante il processo di serializzazione, quindi probabilmente non stai facendo alcun IO. Pertanto, rendendolo asincrono si sta semplicemente passando da un thread pool di thread a un altro thread pool thread, che sarà effettivamente dannoso per il perf. Tuttavia, se sai che il tuo formattatore verrà bloccato in attesa di I/O, allora async potrebbe essere d'aiuto. –
Non sono sicuramente un esperto di Wait vs Wait, ma la mia comprensione è che Wait() blocca il thread corrente mentre Task viene eseguito su un altro thread. attendi inoltre blocca il thread corrente ma lo fa in modo asincrono, liberando il thread per fare altre cose e quindi riprendere al termine dell'attività. Entrambi i casi prevedono un cambio di thread, quindi penso che le prestazioni saranno simili, ma l'approccio asincrono consente (leggermente) una maggiore scalabilità. Come ho detto, le mie conoscenze su questo sono approssimative, quindi dovremmo probabilmente chiedere a Stephen Toub. :) – Mike