हमारे पास एक डब्ल्यूसीएफ सेवा है जिसे हम एक वेब ऐप से उपभोग कर रहे हैं। जिस क्लाइंट का हम उपयोग कर रहे हैं वह विजुअल स्टूडियो "सेवा संदर्भ जोड़ें" विकल्प का उपयोग करके उत्पन्न किया गया था। चूंकि यह एक वेब ऐप है, और चूंकि ऐप की प्रकृति अपेक्षाकृत कम सत्रों की ओर ले जाने की संभावना है, इसलिए जब हम उपयोगकर्ता लॉग इन करते हैं और सत्र के जीवन के लिए इसे रखते हैं तो हमने क्लाइंट का एक उदाहरण बनाने का विकल्प चुना है, फिर सत्र के माध्यम से इसका निपटान संभालें।लगातार डब्लूसीएफ क्लाइंट को ग़लत स्थिति में प्रवेश करना
यह मैं मेरे सवाल के लिए लाता है - हम ग्राहक के चैनल को संभालने के लिए सबसे अच्छा तरीका है एक गलती राज्य में प्रवेश तय करने की कोशिश कर रहे हैं। कुछ चारों ओर खोज के बाद, हम इस के साथ आ गया है:
if(client.State = CommuncationState.Faulted)
{
client = new Client();
}
try
{
client.SomeMethod();
}
catch //specific exceptions left out for brevity
{
//logging or whatever we decide to do
throw;
}
लेकिन यह सच है कि, कम से कम हमारे मामले में, भले ही सेवा ग्राहक नीचे है दिखाएगा की वजह से काम नहीं करता है Open
राज्य जब तक आप वास्तव में इसका उपयोग करके कॉल करने का प्रयास नहीं करते हैं, उस बिंदु पर यह Faulted
स्थिति में प्रवेश करता है।
तो यह हमें कुछ और करने के लिए छोड़ देता है। एक और विकल्प जिसके साथ हम आए थे:
try
{
client.SomeMethod();
}
catch
{
if(client.State == CommunicationState.Faulted)
{
//we know we're faulted, try it again
client = new Client();
try
{
client.SomeMethod();
}
catch
{
throw;
}
}
//handle other exceptions
}
लेकिन वह बदबू आ रही है। जाहिर है, हम एक नए ग्राहक का उपयोग करके और हर कॉल के लिए इसका निपटारा करके इससे बच सकते हैं। यह अनावश्यक लगता है, लेकिन अगर यह सही तरीका है तो मुझे लगता है कि हम यही चुनेंगे। तो क्लाइंट ग़लत स्थिति में है और फिर इसके बारे में कुछ करने का निर्धारण करने के लिए गहन तरीके से संभालने का सबसे अच्छा तरीका क्या है? क्या हमें वास्तव में हर कॉल के लिए एक नया ग्राहक मिलना चाहिए?
ध्यान में रखने के लिए एक और बात - ग्राहक की तत्कालता और यह सभी जांच और हैंडलिंग ग्राहक के लिए एक रैपर वर्ग में होती है। अगर हम ऐसा करने का इरादा रखते हैं, तो यह ऐप के लिए पारदर्शी है - कॉल करने और उनसे अपवादों को संभालने के लिए वहां कोई विशेष कोड की आवश्यकता नहीं है।
ग्राहक को दोषपूर्ण स्थिति में प्रवेश करने का कारण क्या है? मैं हमेशा एक डब्ल्यूसीएफ सेवा सामान्य रूप से एक गलती वापस करने में सक्षम रहा हूं और ग्राहक इसके व्यापार के बारे में जारी रख सकता है। क्या सर्वर प्रतिक्रिया नहीं दे रहा है या कुछ? – Tridus
इस मामले में, हम एएसपी.NET सदस्यता का उपयोग कर रहे हैं, और हम "userIsOnlineTimeWindow" विशेषता से अधिक होकर इसमें भाग गए। जाहिर है कि उस मामले में उपयोगकर्ता को केवल लॉगिन पेज पर रीडायरेक्ट करना होगा, लेकिन हम यह सुनिश्चित करने की कोशिश कर रहे हैं कि हम किसी भी अन्य परिस्थिति के लिए तैयार हैं जिसमें हम एक दोषपूर्ण स्थिति में शामिल हो सकते हैं। – Zannjaminderson