Có cách nào để xử lý ngoại lệ toàn cầu trong Dịch vụ Web ASP.NET thông thường (asmx) bằng ELMAH như chúng ta làm trong trang web ASP.NET không?Xử lý ngoại lệ trong các dịch vụ web với Elmah
Trả lời
Dịch vụ web ASP.NET không bao giờ bắn Application_Error
sự kiện và ngoại lệ không thể được xử lý trên toàn cầu bởi ELMAH như trong các ứng dụng ASP.NET. Nhưng chúng ta có thể "bằng tay" đăng nhập ngoại lệ sử dụng ELMAH:
public int WebServiceMethod() {
try {
...
}
catch (Exception ex) {
Elmah.ErrorLog.GetDefault(
HttpContext.Current).Log(new Elmah.Error(ex, HttpContext.Current));
}
}
Bạn có thể sử dụng một SoapExtension để làm điều này:
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
}
}
}
}
Bạn đăng ký này trong web.config với những dòng sau:
<system.web>
<webServices>
<soapExtensionTypes>
<add type="MyNamespace.ELMAHExtension, MyDLL" priority="1" group="1" />
</soapExtensionTypes>
</webServices>
</system.web>
Điều này sẽ cung cấp cho bạn quyền truy cập vào các đối tượng HttpContext và SoapMessage sẽ cung cấp cho bạn tất cả chi tiết bạn cần về những gì đang được gọi. Tôi nghĩ rằng ngoại lệ bạn truy xuất ở giai đoạn này sẽ luôn là một SoapException và rằng bit bạn quan tâm có lẽ là ngoại lệ bên trong.
Cảm ơn, tôi sẽ thử. –
havent đã có cơ hội để thử điều này, nhưng nó trông giống như nó sẽ làm việc. Trường hợp nó nói 'đăng nhập ngoại lệ ở đây' mã 'Elmah.ErrorLog.GetDefault ( HttpContext.Current) .Log (new Elmah.Error (ví dụ, HttpContext.Current)); 'có thể làm các trick. – codeulike
Nó hoạt động, trên thực tế. – avesse
Bạn có thể sử dụng mã này
try{
// your code in here
}
catch (Exception ert)
{
Elmah.ErrorSignal.FromCurrentContext().Raise(ert);
}
- 1. Cách xử lý ngoại lệ tốt nhất trong ứng dụng với các dịch vụ web
- 2. Xử lý ngoại lệ Web đúng cách?
- 3. Xử lý ngoại lệ trong một ứng dụng web Java
- 4. Xử lý ngoại lệ WCF
- 5. Xử lý ngoại lệ tùy chỉnh - java Web Services
- 6. Bắt ngoại lệ tùy chỉnh từ Dịch vụ web ASMX
- 7. Xử lý ngoại lệ với JPA + Hibernate
- 8. Elmah có xử lý các trường hợp ngoại lệ cũng như
- 9. Xử lý ngoại lệ toàn cầu cho các dịch vụ windows?
- 10. Xử lý lỗi Tôi có nên ném ngoại lệ không? Hoặc xử lý tại nguồn?
- 11. Xử lý ngoại lệ C++
- 12. Xử lý ngoại lệ TPL
- 13. Xử lý trường hợp ngoại lệ Dao trong lớp dịch vụ
- 14. Delphi Xử lý ngoại lệ vấn đề với nhiều khối xử lý ngoại lệ
- 15. xử lý ngoại lệ python
- 16. Xử lý ngoại lệ tùy chỉnh trong dịch vụ REST ServiceStack
- 17. Trình xử lý ngoại lệ UnhandledException trong Dịch vụ Windows .NET
- 18. Xử lý ngoại lệ chưa xử lý trong .NET 1.1
- 19. xử lý ngoại lệ trong Tpl
- 20. Xử lý ngoại lệ AOP
- 21. Xử lý ngoại lệ UserInterrupt trong Haskell
- 22. Xử lý ngoại lệ JSF2
- 23. Xử lý ngoại lệ nút
- 24. Xử lý ngoại lệ ASP.NET MVC Web API
- 25. Mẫu xử lý ngoại lệ
- 26. Xử lý nhiều ngoại lệ
- 27. Xử lý ngoại lệ NHibernate
- 28. Ném ngoại lệ trong bộ xử lý ngoại lệ
- 29. c + + xử lý ngoại lệ
- 30. Ngoại lệ xử lý Antlr
Đó là những gì tôi nghĩ nhưng tôi đã kiểm tra nếu có một "sạch" giải pháp. Cảm ơn –
Vâng, giải pháp hoặc thực hành sạch hơn cũng sẽ rất thú vị đối với tôi. Và đây là câu hỏi hay (+1). –
Cuối cùng tôi đã sử dụng giải pháp của bạn, tôi đã không tìm ra cách tốt hơn để làm điều đó. Cảm ơn gợi ý. –