2009-10-29 24 views
5

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.

Trả lời

0

Có lẽ, cách tốt nhất là thông báo cho khách hàng (bạn có hai mặt, vì vậy bạn có thể) và để khách hàng đóng kênh.

+1

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'? –

+0

Đâ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

1

"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".

Các WCF client dụ có sự kiện mà bạn có thể đăng ký:

  • đóng
  • Đóng
  • faulted
  • Khai trương
  • khai mạc.

Sự kiện bị lỗi được tăng ngay khi kênh song công của bạn dừng lại vì bất kỳ lý do gì.

Tôi tự hỏi tại sao máy chủ lưu trữ của bạn mất 30 giây để đóng. Bạn có thể cung cấp một số mã mẫu không?

+0

IIRC, kênh chỉ phát hiện ra rằng nó bị lỗi khi bạn thực sự cố gắng làm điều gì đó với nó, hoặc nếu bạn thiết lập một nhịp tim (trong trường hợp đó vẫn còn một sự chậm trễ). –

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