Khi một cá thể ClientBase<T>
được sử dụng cho nhiều cuộc gọi dịch vụ WCF, nó có thể đưa kênh vào trạng thái bị lỗi (ví dụ: khi dịch vụ ngừng hoạt động).Làm thế nào để chữa lành các kênh WCF bị lỗi?
Tôi muốn tự động hàn kênh khi dịch vụ xuất hiện trở lại. Cách duy nhất tôi tìm thấy là gọi mã sau đây trước mỗi phương thức gọi:
if (clientBase.InnerChannel.State == CommunicationState.Faulted)
{
clientBase.Abort();
((IDisposable)clientBase).Dispose();
clientBase = new SampleServiceClientBase();
}
Tôi có cảm giác rằng đây không phải là cách phù hợp để thực hiện. Bất cứ ai có một ý tưởng tốt hơn?
Bạn cũng cần T để triển khai IDisposable? –
@DavidGardiner: Không nếu nó triển khai 'ICommunicationObject'. Việc thực hiện 'Dispose' trên các kênh WCF thực sự là một phần của vấn đề. – Aaronaught
Nhưng giao diện ICommunicationObject (http://msdn.microsoft.com/en-us/library/system.servicemodel.icommunicationobject.aspx) không thực hiện IDisposable - vì vậy ví dụ trên sẽ không hoạt động nếu không đưa đồng vào IDisposable. –