मैं डब्ल्यूसीएफ डेटा सेवा का उपयोग कर रहा हूं मेरे पास एक विधि है:
[OperationContract]
public List<string> GetAges()
{
return _registrationData.GetAges();
}
मेरे ग्राहक पक्ष पर, मैं इसे इस तरह तुरंत चालू करता हूं:
_registrationDataServices = new RegistrationDataServiceClient();
यह अब एक प्रतिनिधि को उजागर करता है
_registrationDataServices.GetAgesCompleted += GetAgesCompleted;
और एक फ़ंक्शन कॉल:
_registrationDataServices.GetAgesAsync()
इसके साथ समस्या यह है कि सेवा के लिए कॉल अतुल्यकालिक होगी और परिणाम प्रतिनिधि समारोह में आते हैं, मैं सेवा को कॉल करने और परिणाम वापस आने तक प्रतीक्षा (ब्लॉक) करने में सक्षम होना चाहता हूं, यह डब्ल्यूसीएफ का उपयोग करके कैसे किया जा सकता है ?
मुझे एक डब्ल्यूसीएफ का उपयोग करना है, क्योंकि मेरे पास एक चांदी की रोशनी एप्लिकेशन है जिसे डेटाबेस से डेटा की आवश्यकता है, डब्ल्यूसीएफ को मेरी डेटा एक्सेस परत के रूप में .NET असेंबली से बुलाया जा रहा है।
2 जवाब
सिल्वरलाइट/डब्ल्यूपीएफ एप्लिकेशन से सिंक्रोनस रूप से वेब सेवा को कॉल करना एक बहुत ही खराब अभ्यास है। वेब सेवा कॉल समाप्त होने तक सिंक कॉल आपके UI को हैंग कर देगी, जिससे खराब उपयोगकर्ता अनुभव होगा। हालांकि, अगर आप अभी भी इसके लिए तैयार हैं, तो यहाँ एक बहुत ही उपयोगी लिंक है।
इसे सिंक्रोनाइज़ न करें -- आप UI थ्रेड को ब्लॉक कर देंगे। उपयोगकर्ता आमतौर पर सोचते हैं कि यदि UI फ़्रीज़ हो गया है तो उनका सॉफ़्टवेयर क्रैश हो गया है।
आदर्श रूप से आप एक मोडल बिजी इंडिकेटर बनाएंगे जो कॉल के वापस आने की प्रतीक्षा करते समय 'प्रगति' को एनिमेट और दिखाता है, और जब आप पूर्ण ईवेंट प्राप्त करते हैं तो यह चला जाता है।
यहां तक कि अगर आप अभी भी आश्वस्त थे कि आपके मामले में UI थ्रेड को ब्लॉक करना ठीक था, तो आप वास्तव में इसे सिंक्रोनाइज़ नहीं कर सकते! इसे इस तरह से एक कारण के लिए डिजाइन किया गया था - प्रवाह के साथ जाओ।