2009-02-11 17 views
5

Vì nhiều lý do phổ biến, tôi muốn sử dụng truy tìm ứng dụng ASP.NET của mình. Đặc biệt là kể từ khi tôi phát hiện ra về khả năng sử dụng các công cụ Service Trace Viewer cho phép bạn kiểm tra dấu vết của bạn một cách mạnh mẽ.ASP.NET và System.Diagnostics truy tìm - tôi đã bỏ lỡ một cái gì đó, hoặc là một ý tưởng tồi?

Vì trước đây tôi chưa bao giờ sử dụng dấu vết này, nên tôi bắt đầu bỏ nó. Sau một thời gian của Google, SO và MSDN cuối cùng tôi đã có một ý tưởng tốt về cách mọi thứ hoạt động. Nhưng tôi cũng tìm thấy một điều rất khó tin.

Khi sử dụng dấu vết trong các ứng dụng ASP.NET, việc tạo nhóm thông điệp theo dõi với nhau bằng các yêu cầu web sẽ rất có ý nghĩa. Đặc biệt là vì một trong những lý do tôi muốn sử dụng nó là để nghiên cứu các vấn đề về hiệu năng. Công cụ được đề cập ở trên cũng hỗ trợ điều này bằng cách sử dụng các thẻ <Corrleation> trong các tệp XML được tạo. Mà lần lượt đến từ System.Diagnostics.Trace.CorrelationManager. Nó cũng cho phép các tính năng đẹp khác như Hoạt động bắt đầu/dừng, cung cấp một nhóm tốt hơn các thông điệp dấu vết. Cool, phải không?

Tôi cũng vậy, cho đến khi tôi bắt đầu kiểm tra nơi thực tế đã thực sự sống ở nơi CorrelationManager. Sau khi tất cả - đó là một tài sản tĩnh. Sau khi một số chơi xung quanh với Reflector tôi phát hiện ra một cái gì đó đáng sợ - nó được lưu trữ trong CallContext! Đó là loại điều we shouldn't be using in ASP.NET, phải không?

Vậy ... tôi có thiếu gì đó ở đây không? Truy tìm có thực sự thiếu sót về cơ bản trong ASP.NET không?

Đã thêm: Emm, tôi sắp sửa tự viết lại nội dung này. Tôi vẫn muốn sử dụng công cụ gọn gàng để khám phá dấu vết. Bất kỳ lý do gì tôi không nên làm điều này? Có lẽ có cái gì tốt hơn chưa? Sẽ rất tuyệt nếu tôi có một số câu trả lời sớm. :)

Đã thêm 2: Một đồng nghiệp của tôi xác nhận rằng đây không chỉ là vấn đề lý thuyết. Anh ta đã quan sát điều này trong hệ thống anh ta đang làm việc. Vì vậy, nó được giải quyết. Tôi sẽ xây dựng một hệ thống nhỏ mới làm mọi thứ theo cách tôi muốn. :)

Đã thêm 3: Thật tuyệt, những người ở Microsoft không thể tìm thấy bất kỳ điều gì sai trái khi sử dụng Trình quản lý tương quan trong ASP.NET. Vì vậy, dường như chúng tôi không nhận được một sửa chữa cho lỗi này sau khi tất cả ...

Trả lời

1

OK, vì vậy đây là cách kết thúc.

Đồng nghiệp của tôi đã gọi cho Microsoft và báo cáo lỗi này cho họ. Là đối tác được chứng nhận có nghĩa là chúng tôi có quyền truy cập vào một số hàng đợi cố định được ưu tiên hơn hoặc một thứ gì đó ... không biết nội dung đó. Dù sao, họ đang làm việc trên nó. Hy vọng rằng chúng ta sẽ sớm thấy một bản vá. :)

Trong thời gian đó, tôi đã tạo một lớp nhỏ của riêng mình. Nó không hỗ trợ tất cả các chuông và còi mà khung theo dõi mặc định làm, nhưng nó chỉ là những gì tôi cần. :) Cụ thể hơn:

  • Nó ghi cùng định dạng XML làm mặc định XmlWriterTraceListener để tôi có thể sử dụng công cụ để phân tích nhật ký.
  • Nó có vòng quay nhật ký được tích hợp sẵn - thứ mà đồng nghiệp của tôi phải tự thực hiện trên đầu trang XmlWriterTraceListener.
  • Ghi nhật ký thực tế được hoãn lại cho một chuỗi khác để hiệu suất có thể được đo chính xác hơn.
  • Các mối tương quan hiện được lưu trữ trong HttpContext.Items do đó các đặc tính phân luồng ASP.NET không ảnh hưởng đến nó.

Chúc mừng, tôi hy vọng. :)

3

Bạn đưa ra một câu hỏi rất thú vị. Sau khi nhìn vào Reflector, tôi cũng thấy rằng CorrelationManager đang sử dụng CallContext để lưu trữ id hoạt động. Tôi đã không làm việc với truy tìm nhiều, vì vậy tôi thực sự không thể nói thay mặt cho loại hoạt động mà nó theo dõi, nhưng nếu nó theo dõi một hoạt động trên toàn bộ vòng đời của yêu cầu trang, mỗi bài viết bạn đã tham chiếu ở trên, là khả năng id hoạt động có thể bị hủy liên kết với hoạt động thực tế. Hoạt động này sẽ xuất hiện để chết nửa chừng.

HttpContext có vẻ lý tưởng để theo dõi toàn bộ yêu cầu trang từ đầu đến cuối, vì nó sẽ được chuyển qua ngay cả khi thực thi thay đổi thành chuỗi khác. Tuy nhiên, các HttpContext sẽ không được chuyển giao cho các đối tượng kinh doanh của bạn, nơi như CallContext sẽ. Trên một mặt lưu ý, tôi thấy rằng CallContext cũng có thể được chuyển khi sử dụng từ xa giữa ứng dụng khách và ứng dụng máy chủ khá tiện lợi, nhưng trong trường hợp theo dõi trang web, điều này thực sự không hữu ích.

Nếu bạn chưa có, hãy xem this guy's site. Vấn đề được mô tả trong bài viết này không phải là vấn đề tương tự mà Cup(Of T) article đã đề cập, nhưng nó vẫn khá thú vị. Ông cũng cung cấp một số liên kết rất thông tin trên trang mô tả các thành phần của CorrelateionManager.

Thật không may, tôi không thực sự có câu trả lời cho câu hỏi của bạn, nhưng tôi chắc chắn tìm thấy chủ đề thú vị và sẽ tiếp tục xem xét chủ đề đó. Vì vậy, hãy cập nhật bài đăng này khi bạn tìm hiểu thêm. Tôi rất tò mò muốn biết bạn hoặc những người khác (hy vọng ai đó ở ngoài đó có thể làm sáng tỏ chủ đề) khi tìm hiểu điều này.

Dù sao, chúc may mắn. Tôi sẽ nói chuyện với một số các peeps tại công việc của tôi về điều này và đăng bài sau này nếu tôi tìm thấy bất cứ điều gì.

Chris

+0

Tốt. Tôi chưa tìm thấy bài viết đó. Trên thực tế, nó cũng không thể cho Google bất cứ điều gì về chủ đề này. Lạ lùng khi nhiều người không bắt được điều này. –

+1

Liên kết tới "trang web của anh chàng này" đã thay đổi: http://sticklebackplastic.com/post/2007/08/14/One-mighty-gotcha-for-SystemDiagnostic-activity-Ids.aspx –

+0

liên kết đã được cập nhật, cảm ơn chris – regex