2010-09-17 36 views
9

Tôi có một ứng dụng bao gồm một số dịch vụ WCF, một số trong số đó được thực hiện trong Workflow Foundation (.NET 3.5), một số khác chỉ đơn thuần là C#. Các dịch vụ này liên lạc với nhau qua một netNamedPipeBinding vì lý do hiệu suất. Vấn đề là tôi thấy ngày càng nhiều CommunicationExceptions và PipeExceptions cơ bản ngay sau khi tải hệ thống tăng lên. Điều thú vị là các giao dịch này dường như kết thúc cuối cùng. Một lý do cho điều đó là chúng ta có một cơ chế thử lại trong các quy trình công việc, nhưng ngay cả các cuộc gọi từ các dịch vụ C# đơn giản thành công mặc dù tôi thấy các lỗi này trong các dấu vết WCF. Có một số cơ chế thử lại trong hệ thống con đường ống được đặt tên của Windows hay gì đó không?Làm cách nào để khắc phục sự cố về Ngoại lệ và Ngoại lệ của Ống trong WCF?

Tuy nhiên, tôi muốn sửa các lỗi này hoặc ít nhất là hiểu vấn đề cơ bản. Tôi cảm thấy họ đang tác động đến hiệu suất và tính ổn định của ứng dụng. Tôi làm cách nào để chẩn đoán nguyên nhân gốc rễ của các lỗi này nếu tôi không thấy bất kỳ ngoại lệ nào khác đến từ chính các dịch vụ đó?

Dưới đây là một số trường hợp ngoại lệ tôi nhận được:

PipeException:Có lỗi khi đọc từ ống: Ống đã được chấm dứt. (109, 0x6d).

Và:

PipeException:Thao tác không thể được hoàn thành bởi vì các đường ống đã được đóng. Điều này có thể là do ứng dụng ở đầu kia của đường ống thoát ra.

trong một TimeoutException:Kết nối đường ống đã bị hủy bỏ vì một đọc không đồng bộ từ các đường ống đã không hoàn thành trong thời gian chờ phân bổ của 0:02:00. Thời gian được phân bổ cho hoạt động này có thể là một phần của thời gian chờ lâu hơn.

Hiện tại, ngoại lệ thời gian chờ dường như đến từ thực tế là hệ thống đang gặp sự cố khi xử lý tải. Những hoạt động này khá nhỏ bình thường nhưng số lượng chúng dường như là vấn đề. Hoặc điều này có thể là kết quả của các kết nối đường ống trước đó bị chấm dứt và không được trả lại cho hồ bơi?

Tôi đã thử nghiệm với một dịch vụTheo dõi hành vi trong cấu hình WCF để tăng số lượng các cá thể, v.v. nhưng các lỗi này tiếp tục nổi lên. Có lời khuyên nào không?

/EDIT: Tôi đã bật cả truy tìm WCF và ghi nhật ký thông báo. Đó là nơi tôi nhìn thấy các ngoại lệ về ống và ngoại lệ truyền thông. Bản thân ứng dụng không hiển thị bất kỳ lỗi nào. Chúng tôi đã thiết kế các dịch vụ WCF khá nhiều để tất cả các ngoại lệ được ghi lại bằng cách sử dụng log4net và tôi không thấy bất kỳ lỗi nào trong các nhật ký đó. Điều này dường như đang xảy ra ở cấp WCF.

+4

Cuối cùng chúng tôi phát hiện ra rằng có sự cố trong ngăn xếp WCF net.pipe. Chúng tôi đã thay đổi thành ràng buộc cơ bảnHttp và bên cạnh việc tất cả các lỗi đều biến mất, các cuộc gọi dịch vụ trở nên nhanh gấp hai lần. Thật kỳ lạ. – Roy

+0

bạn cuối cùng đã tìm ra điều này như thế nào?Tôi đang chạy vào các vấn đề tương tự nhưng tôi không hoàn toàn sẵn sàng để nhảy tàu chưa đến basicHttp. –

+0

@ColeW whoo, đây là một câu hỏi cũ, tôi phải đào sâu vào ký ức của mình. Tôi nghĩ rằng chúng tôi có một số phản hồi về danh sách gửi thư của Giám đốc khu vực, đồng nghiệp của tôi là RD rằng chồng net.pipe không ổn định dưới tải cao và sau khi thử nghiệm với basicHttp, chúng tôi nhận được thông lượng tốt hơn và dịch vụ ổn định hơn. Tôi đã từ lâu từ bỏ WCF nên tôi không chắc chắn về tình trạng hiện tại. Rất tiếc khi biết bạn vẫn gặp sự cố tương tự. – Roy

Trả lời

2

Bạn có thể muốn kích hoạt ghi nhật ký và theo dõi hoạt động trên dịch vụ của mình. Sau đó, sử dụng Trình theo dõi dịch vụ để có một cái nhìn rõ ràng về chuỗi các sự kiện.

Điều này sẽ cung cấp một lượng lớn dữ liệu để trải qua, vì vậy tôi đề nghị bạn kích hoạt nó chỉ cho một trường hợp thử nghiệm, và sau đó tắt nó. Điều này sẽ hạn chế lượng dữ liệu.

+0

Cảm ơn, thực sự tôi đã làm điều đó rồi. Đó thực sự là nơi tôi nhìn thấy các ngoại lệ ống và không nhất thiết trong ứng dụng của tôi. – Roy

Các vấn đề liên quan