जब एक ही ClientBase<T>
उदाहरण एकाधिक डब्ल्यूसीएफ सेवा कॉल के लिए उपयोग किया जाता है, तो यह एक चैनल को एक दोषपूर्ण स्थिति (यानी जब सेवा डाउन हो) में मिल सकती है।दोषपूर्ण डब्ल्यूसीएफ चैनलों को कैसे ठीक किया जाए?
सेवा फिर से आने पर मैं स्वचालित रूप से चैनल को ठीक करना चाहता हूं। मुझे मिला एकमात्र तरीका प्रत्येक विधि कॉल से पहले निम्नलिखित कोड को कॉल करना है:
if (clientBase.InnerChannel.State == CommunicationState.Faulted)
{
clientBase.Abort();
((IDisposable)clientBase).Dispose();
clientBase = new SampleServiceClientBase();
}
मुझे यह महसूस हुआ कि यह करने का यह सही तरीका नहीं है। किसी को भी बेहतर विचार मिला?
क्या आपको आईडीस्पोजेबल को लागू करने के लिए टी की भी आवश्यकता है? –
@ डेविड गार्डिनर: यदि यह 'ICommunicationObject' लागू नहीं करता है। डब्ल्यूसीएफ चैनलों पर 'निपटान' कार्यान्वयन वास्तव में समस्या का हिस्सा है। – Aaronaught
लेकिन ICommunicationObject इंटरफ़ेस (http://msdn.microsoft.com/en-us/library/system.servicemodel.icommunicationobject.aspx) IDISposable लागू नहीं करता है - इसलिए ऊपर दिया गया उदाहरण IDISposable को कास्टिंग के बिना काम नहीं करेगा। –