Tôi có một dịch vụ Windows ghi nhật ký các bài đọc tốc độ từ súng radar tới cơ sở dữ liệu. Ngoài ra, tôi đã thực hiện dịch vụ một máy chủ WCF. Tôi có một Biểu mẫu và một khách hàng CF đăng ký dịch vụ và được gọi lại bất cứ khi nào có một bài đọc đáp ứng các tiêu chí nhất định.Hợp đồng gọi lại dài hạn thông qua kênh song công WCF - các mẫu thiết kế thay thế?
Điều này hoạt động theo nguyên tắc nhưng sau một thời gian kênh hết thời gian chờ. Dường như có một số vấn đề cơ bản với các kết nối dài hạn (xem http://blogs.msdn.com/drnick/archive/2007/11/05/custom-transport-retry-logic.aspx) và một cuộc gọi lại hai chiều HTTP có thể không phải là giải pháp phù hợp. Có cách nào khác tôi có thể nhận ra một mô hình xuất bản/đăng ký với WCF?
Chỉnh sửa: Ngay cả với thời gian chờ 2 giờ, kênh cuối cùng cũng bị xâm phạm. Tôi gặp lỗi này:
Không thể hoàn thành thao tác 'SignalSpeedData' vì kênh phiên đã hết thời gian chờ để nhận tin nhắn. Để tăng thời gian chờ, hãy đặt thuộc tính receiveTimeout trên liên kết trong tệp cấu hình của bạn hoặc đặt thuộc tính ReceiveTimeout trên Ràng buộc trực tiếp.
Điều này xảy ra sau 15 phút kể từ lần gọi thành công cuối cùng. Tôi tự hỏi nếu thay vì giữ phiên mở, nó có thể tái thiết lập một phiên mới cho mỗi cuộc gọi.
Nếu bạn có nghĩa là phiên đáng tin cậy - Tôi đã sử dụng nó và tôi đặt thời gian chờ không hoạt động là 2 giờ. – cdonner
Vì vậy, RS là "nghĩa vụ" để gửi tin nhắn cơ sở hạ tầng sau khi thời gian chờ không hoạt động của bạn. Đáng buồn là nó không có trong phiên bản mới nhất của khung công tác. Nếu bạn gửi một thông điệp "nhịp tim" cứ 20 phút một lần, nó sẽ giải quyết vấn đề. Ngoài ra còn có một thiết lập khác mà tôi sẽ cần phải tìm kiếm vào ngày mai. – Steve
Kính gửi Steve, cdonner, Giải pháp thực tế là gì? Các thông điệp heartbeat không đẹp cho tôi và tôi muốn một số tham số cấu hình. –