有沒有辦法使用ELMAH來在全球範圍內定期ASP.NET Web服務(ASMX)處理異常就像我們在ASP.NET網站做呢?處理異常與ELMAH
33
A
回答
23
ASP.NET Web服務永遠不會觸發Application_Error
事件和異常不能在全球範圍內通過ELMAH像在ASP.NET應用程序進行處理。但是,我們可以在「手動」使用ELMAH記錄異常:
public int WebServiceMethod() {
try {
...
}
catch (Exception ex) {
Elmah.ErrorLog.GetDefault(
HttpContext.Current).Log(new Elmah.Error(ex, HttpContext.Current));
}
}
23
可以使用的SoapExtension做到這一點:
:using System;
using System.Web.Services.Protocols;
namespace MyNamespace
{
class ELMAHExtension : SoapExtension
{
public override object GetInitializer(Type serviceType)
{ return null; }
public override object GetInitializer(LogicalMethodInfo methodInfo, SoapExtensionAttribute attribute)
{ return null; }
public override void Initialize(object initializer)
{ }
public override void ProcessMessage(SoapMessage message)
{
if (message.Stage == SoapMessageStage.AfterSerialize &&
message.Exception != null)
{
// Log exception here
}
}
}
}
您在以下行的web.config中註冊該
<system.web>
<webServices>
<soapExtensionTypes>
<add type="MyNamespace.ELMAHExtension, MyDLL" priority="1" group="1" />
</soapExtensionTypes>
</webServices>
</system.web>
這會給你訪問的HttpContext和的SOAPMessage對象應該給你所有你需要了解正在叫什麼細節。我認爲在這個階段你檢索到的異常將永遠是一個SoapException,你感興趣的位可能是內部的異常。
0
您可以使用此代碼
try{
// your code in here
}
catch (Exception ert)
{
Elmah.ErrorSignal.FromCurrentContext().Raise(ert);
}
相關問題
- 1. ELMAH與企業庫異常處理塊
- 2. 用Elmah處理異常
- 3. Elmah for WCF用於異常處理
- 4. python異常與C++異常處理
- 5. 與NumberFormatException異常處理
- 6. 如果我使用ELMAH,是否需要使用異常處理?
- 7. 在MVC應用程序中使用Elmah處理水密異常
- 8. 如何禁用ELMAH未處理的異常日誌記錄?
- 9. 異常處理
- 10. 處理異常
- 11. 異常處理
- 12. 異常處理
- 13. 異常處理
- 14. 異常處理
- 15. 處理異常
- 16. 異常處理
- 17. 異常處理
- 18. 異常處理
- 19. 異常處理
- 20. 異常處理?
- 21. 異常處理
- 22. 異常處理
- 23. 異常處理
- 24. 異常處理
- 25. 註銷異常氾濫elmah
- 26. Elmah沒有記錄異常
- 27. Elmah不記錄NullReference異常
- 28. 德爾福與多個異常處理塊的異常處理問題
- 29. AllegroServe異常處理
- 30. InvokeRequired異常處理
這就是我想,但我檢查,如果有一個「乾淨」的解決方案。謝謝 – 2010-02-02 18:17:43
是的,更清潔的解決方案或練習對我來說也會很有趣。這是個好問題(+1)。 – 2010-02-02 19:03:39
我終於使用了你的解決方案,我沒有找到一個更好的方法來做到這一點。感謝提示。 – 2010-03-23 12:57:17