OWIN

2014-11-30 21 views
16

'u kullanarak her bir özel durumu doğru bir şekilde kaydetme sorumu oldukça basit olmalıydı, ancak ne yazık ki çözmede şansım yoktu.OWIN

Temel olarak, OWIN tarafından barındırılan ve Azure'a dağıtılmış bazı Web API denetleyicileri var.

Gerçekten (örneğin OAuthAuthorizationServerProvider veya SignalR Kalıcı Bağlantılar için) her katman meydana istisnalar izini gerekiyor, ama kesinlikle bunu başarmak için nasıl bir ipucu yok.

  • Ben Elmah çalıştı, ama HttpContext eksik nedeniyle düzgün Owin çalışmak görünmüyor.
  • Log4net'i kullanmayı denedim, ancak yalnızca özel bir ExceptionFilterAttribute kullanarak Web API Denetleyicileri tarafından atılan istisnaları günlüğe kaydedebiliyorum .. diğerleri yok sayılıyor.
  • Özel bir LoggerFactory tanımlamayı denedim ve app.SetLoggerFactory(new MyLoggerFactory()), kullanarak atamada atamaya çalıştım, ancak diğer middlewares tarafından atılan istisnalar günlüğe kaydedilmedi.
  • İstemciye gönderilen en az anlamlı bir hata iletisi almayı denedim, ancak <customErrors mode="Off"/> ve <deployment retail="false"/> rağmen, Azure bir şey döndürmeyi reddediyor ancak {"message":"an error has occurred"}. Azure Web Sitelerini ve Azure Bulut Hizmetlerini denedim.
  • 'un OWIN ile çalışması gerektiğini, Elmah.io veya Raygun.io gibi bazı bulut alternatifleri gördüm, ancak bulut özelliklerine ihtiyacım yok ve kesinlikle bazı özel durumları günlüğe kaydetmek için yüzlerce dolar ödemeye değmez. .

Ne günlüğüne benim uygulama tarafından atılan olası istisna en iyi yolu olmalıdır? Yardımlarınız

cevap

11

için

sayesinde bu bağlantıyı bakmak var? Bir exceptionFilter kullanarak tüm özel durumları yakalamak olamaz çünkü http://www.asp.net/web-api/overview/error-handling/web-api-global-error-handling

, onlar da senin ihtiyacını uygun değilse, küresel hata Bundan sonra 2.

Web Api işleme izin vermek için bir IExceptionLogger ve IExceptionHandler kullanmayı teklif, , yanıt göndermeden

  1. ,
  2. yanıt kodu analiz tepki başlığındaki bir RequestID oluşturmak: Eğer (kimlik doğrulaması aşamasında öncesi) ilk konumda yerleştirir bir OwinMiddleWare, bu katman olabilir inşa edebilir ve eğer hayırsa ta IsSuccessStatusCode, bir DB istisna iletisi ve RequestID kullanarak istemcisi basit hata mesajı göndermek cevap içeriğini yerini alabilecek

(Eğer db ilgili istisna bulmasını sağlamak için) umarım bu yardım

+2

Çok teşekkür ederim, Jeremie. Bu hile yaptı. Özellikle, bir IExceptionHandler kullanarak OAuth dahil olmak üzere tüm middlewares istisnaları yakalamak için yeterli değildi. Ancak yeni bir ara katman tanımlamak ve içerdeki istisnaları ele almak, her iki problemimi de çözdü: bunları günlüğe kaydet ve müşteriye ne ileteceğine karar ver. Tekrar teşekkürler! :) –

+0

@MenionLeah Orta araç kullanarak istisnayı yakalamak için aynı aramadayım, bir aracın tavsiyesi var mı? Önceki uygulamada elmah ve benzer bir şey istiyoruz, teşekkürler – Juan

+0

Merhaba @Juan; Üzgünüm, veritabanımızda saklamak için kendi kodumu kullanıyorum ve onlara erişmek için bir web sayfası sağladım. –