Tôi có một Dịch vụ Windows lưu trữ ba kênh WCF hai chiều khác nhau. Khách hàng có thể kết nối để có các bản cập nhật được gửi đến họ thông qua hợp đồng gọi lại của họ. Về cơ bản có ba kênh pub-sub.WCF - Đóng một khối ServiceHost hai chiều cho thời gian CloseTimeout nếu đóng khi khách hàng kết nối
Dịch vụ này mất nhiều thời gian để thoát khi khách hàng được kết nối. Cuộc gọi đến ServiceHost.Close
mất 10 giây để quay lại (vì vậy dịch vụ mất 30 giây để dừng lại.) Hóa ra là closeTimeout
trong cấu hình của tôi là 10 giây. Thay đổi giá trị này chỉ ra rằng đây là nguyên nhân của vấn đề.
Tôi phải làm gì để đóng kênh kịp thời? Tôi không thích ý tưởng rằng một cái gì đó là thời gian ra ngoài. Tôi có thể gọi Abort
, nhưng có vẻ như phải có cách tốt hơn. Tôi đã không nhìn thấy điều này trên các kênh không song công trước đây, do đó, giả sử nó là một cái gì đó để làm với nó là duplex.
Lý tưởng nhất là khách hàng sẽ được thông báo ngay lập tức rằng kênh đã bị lỗi, để người dùng có thể thấy ngay rằng các bản cập nhật đã bị tạm dừng.
Bạn đã thử điều này chưa? Có gì để nói rằng đầu kia của kênh cũng sẽ không chặn 'CloseTimeout'? –
Đây chỉ là cách tôi sử dụng WCF và tôi không bao giờ có vấn đề như của bạn. Có thể trùng hợp, có thể không. Chỉ cần chia sẻ kinh nghiệm của tôi. – adontz