2012-01-23 21 views
6

Tôi có một tự tổ chức dịch vụ WCF sử dụng net tcp duplex callbackWCF callback net tcp duplex chỉ có 1 cách faulted

về phía khách hàng, tôi nghe về sự kiện faulted trên Channel và ChennelFactory. khi kênh bị lỗi, khách hàng sẽ tạo lại kênh và đăng ký lại.

ở phía máy chủ, tôi lưu trữ kênh gọi lại và lưu trữ tham chiếu của Kênh bằng cách gọi OperationContext.Current.Channel để tôi có thể nghe sự kiện bị lỗi và đã đóng trên kênh này. Khi bị lỗi, máy chủ sẽ xóa người đăng ký đó.

Điều này làm việc hầu hết thời gian cho đến gần đây tôi quan sát thấy một hành vi không mong muốn: kênh gọi lại bị lỗi trên máy chủ nhưng kênh có vẻ ổn ở phía máy khách, điều này dẫn đến khách hàng không đăng ký lại trong khi máy chủ đã bị xóa người đăng ký và khách hàng đó sẽ không nhận được bất kỳ cuộc gọi lại nào.

Tôi nghĩ về giao tiếp song công, nếu có lỗi kết thúc, kênh song công sẽ bị lỗi.

phiên đáng tin cậy được kích hoạt và thời gian chờ là rất dài (2 giờ) (có lẽ đây dẫn đến khách hàng có thể chấm dứt lỗi không cảm biến nhanh chóng đủ?)

Ai có thể giải thích tại sao điều này xảy ra?

Một câu hỏi khác sẽ là lý do tại sao nó bị lỗi? Tôi có 40 máy khách được kết nối nhưng máy chủ sẽ phát hiện một máy khách ngẫu nhiên bị lỗi vào một thời điểm ngẫu nhiên.

Trả lời

2

Tôi không chắc chắn lý do. Nhưng tôi cho rằng một kênh có thể thất bại theo cách mà sự kiện bị lỗi không bao giờ đến được máy khách hoặc máy chủ. Ngoài ra còn có trường hợp để xem xét khi một khách hàng bị treo một cách abrubtly.

Dù sao trong dự án của tôi, tôi kết luận rằng dựa vào các sự kiện kênh bị lỗi là không đủ tin cậy. Vì vậy, tôi quy định ping tất cả các thuê bao từ máy chủ thông qua các kênh gọi lại. Nếu khách hàng không trả lời trong giới hạn thời gian chờ, nó sẽ bị xóa khỏi danh sách người đăng ký.

Từ phía máy khách, bạn cũng có thể bắt ngoại lệ thời gian chờ và tạo lại kênh nếu nessesary.

1

Thời gian chờ lâu không được đổ lỗi, rằng tôi chắc chắn vì tôi đang ở trong tình huống giống nhau và tôi cũng gặp phải sự cố với thời gian chờ ngắn.

Xử lý các kênh bị lỗi ở phía dịch vụ thật dễ dàng. Bạn có thể có một thử/bắt xung quanh cuộc gọi gọi lại và đối phó với nó chỉ khi bạn thực sự cần nó.

Về phía khách hàng, ngay bây giờ tôi không thấy bất kỳ cách hợp lý nào để thực hiện điều đó. Hy vọng rằng ai đó sẽ đề xuất một cái gì đó ở đây ...

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