Tôi đang sử dụng trung tâm SignalR trong ứng dụng MVC4 của mình. Tôi đã thêm ELMAH để xử lý tất cả các lỗi. vấn đề là các lỗi xảy ra trong Hub không được đăng nhập vào ELMAH axd. Có cách nào để định cấu hình không?Cách định cấu hình ELMAH với SignalR
14
A
Trả lời
9
Bạn phải thêm HubPipelineModule
và cũng đảm bảo bạn đặt một ApplicationName trong phần tử ErrorLog của mình, Nếu không Elmah sẽ không thể đăng nhập lỗi vì nó sẽ không có HttpContext hoặc AppName để đăng nhập .
<errorLog type="Elmah.SqlErrorLog, Elmah" applicationName="MyAppName" connectionStringName="myConnString" />
Các HubPipelineModule code I've used là như sau:
public class ElmahPipelineModule : HubPipelineModule
{
private static bool RaiseErrorSignal(Exception e)
{
var context = HttpContext.Current;
if (context == null)
return false;
var signal = ErrorSignal.FromContext(context);
if (signal == null)
return false;
signal.Raise(e, context);
return true;
}
private static void LogException(Exception e, IHubIncomingInvokerContext invokerContext)
{
var context = HttpContext.Current;
ErrorLog el = ErrorLog.GetDefault(context);
el.Log(new Error(e));
}
protected override void OnIncomingError(Exception ex, IHubIncomingInvokerContext context)
{
var exception = ex;
if (ex is TargetInvocationException)
{
exception = ex.InnerException;
}
else if (ex is AggregateException)
{
exception = ex.InnerException;
}
if (!RaiseErrorSignal(exception))
LogException(exception, context);
}
}
Hãy chắc chắn rằng bạn thêm các mô-đun cho đường ống trung tâm:
GlobalHost.HubPipeline.AddModule(new ElmahPipelineModule());
EDIT
SignalR 2+
Tôi nhận thấy không có ngoại lệ SignalR nào của mình đang được ghi lại trong một dự án gần đây mà tôi đã làm việc và đã phát hiện ra rằng một ArgumentNullException được ném khi cố gắng lấy ErrorSignal từ ngữ cảnh hiện tại. Phương thức sau đây xử lý đúng với ngoại lệ này để các lỗi SignalR được ghi lại một lần nữa.
private static bool RaiseErrorSignal(Exception e)
{
var context = HttpContext.Current;
if (context == null)
return false;
try
{
var signal = ErrorSignal.FromCurrentContext();
if (signal == null)
return false;
signal.Raise(e, context);
return true;
}
catch (ArgumentNullException)
{
return false;
}
}
Các vấn đề liên quan
- 1. Cấu hình SignalR & require.js
- 2. Không thể cấu hình mail cho ELMAH
- 3. Các tệp cấu hình bên ngoài với elmah
- 4. Trợ giúp với Cấu hình Elmah trong ASP.NET
- 5. Có thể cấu hình ELMAH hoàn toàn bằng mã không?
- 6. Cách định cấu hình MAVEN?
- 7. Cách định cấu hình đúng cách NSFetchedResultsController
- 8. SignalR bị mất tin nhắn nếu IIS cấu hình với hơn 1 quy trình công nhân
- 9. Định cấu hình Eclipse Formatter với m2e
- 10. slf4j + java.util.logging: cách định cấu hình?
- 11. Cách định cấu hình đẩy tự động?
- 12. Cách định cấu hình java.util.logging trên Android?
- 13. Cách định cấu hình log4j.properties cho SpringJUnit4ClassRunner?
- 14. Lỗi máy chủ SignalR "ConnectionId có định dạng không đúng." với Thư viện SignalR-ObjC
- 15. Phần cấu hình máy ASP.NET Cấu hình mặc định
- 16. log4net - định cấu hình bằng nhiều tệp cấu hình
- 17. Cách sử dụng SignalR với .net 3.5
- 18. ELMAH với nhiều ứng dụng
- 19. Làm thế nào để cấu hình ELMAH để làm việc với Windows Azure? Tôi nhận được 404 trên Elmah.axd
- 20. Định dạng tệp cấu hình
- 21. Định cấu hình Lời cảm ơn với Spring.NET
- 22. Định cấu hình sessionFactory với Spring, Hibernate và LocalSessionFactoryBuilder
- 23. Cách cấu hình xdebug với WAMP
- 24. Định cấu hình Django-rest
- 25. SignalR kết hợp với Breeze
- 26. Không thể định cấu hình Android Với Ubuntu 11.10
- 27. Cách định cấu hình ghi nhật ký trong Jetty thông qua tệp cấu hình?
- 28. Định cấu hình độ bền và orm với JPA 2
- 29. Định cấu hình Erlang để hoạt động với SSL
- 30. Cách định cấu hình Upshot.js cho dịch vụ OData?
Đối với bất kỳ ai khác bị kẹt ở bước cuối cùng, hãy thêm dòng cuối cùng đó vào lớp RegisterHubs. Ví dụ: 'public static void Start() {RouteTable.Routes.MapHubs(); GlobalHost.HubPipeline.AddModule (mới Shopperscape.Web.API.ElmahPipelineModule()); } ' – Chris
@Chris Điều này làm việc cho SignalR 1.x? –
@Giles - mã này dành cho SignalR 1 – damienc88