हमारे SharePoint/ASP.NET वातावरण में पुन: उपयोग के लिए हम डेटा रिट्रीवर वर्गों है कि सभी एक आम इंटरफ़ेस से निकाले जाते हैं की एक श्रृंखला है। मुझे डेटा रेट्रिवर बनाने का कार्य सौंपा गया था जो डब्ल्यूसीएफ का उपयोग करके अन्य शेयरपॉइंट खेतों के साथ दूरस्थ रूप से संवाद कर सकता था। जिस तरह से मैंने इसे फिलहाल कार्यान्वित किया है वह एक सिंगलटन ChannelFactory<T>
एक स्थिर कन्स्ट्रक्टर में बनाया गया है और उसके बाद रिमोट डेटा रिट्रिवर के प्रत्येक इंस्टेंस द्वारा एक व्यक्तिगत प्रॉक्सी इंस्टेंस बनाने के लिए पुन: उपयोग किया जाता है। मुझे लगा कि यह अच्छी तरह से काम करेगा क्योंकि ChannelFactory
केवल ऐप डोमेन में एक बार तत्काल हो जाता है और इसकी रचना guaranteed to be thread-safe है। मेरा कोड ऐसा कुछ दिखता है:ChannelFactory <T> एक सिंगलटन बनाना और ग्राहक कनेक्शन
public class RemoteDataRetriever : IDataRetriever
{
protected static readonly ChannelFactory<IRemoteDataProvider>
RequestChannelFactory;
protected IRemoteDataProvider _channel;
static RemoteDataRetriever()
{
WSHttpBinding binding = new WSHttpBinding(
SecurityMode.TransportWithMessageCredential, true);
binding.Security.Transport.ClientCredentialType =
HttpClientCredentialType.None;
binding.Security.Message.ClientCredentialType =
MessageCredentialType.Windows;
RequestChannelFactory =
new ChannelFactory<IRemoteDataProvider>(binding);
}
public RemoteDataRetriever(string endpointAddress)
{
_channel = RemoteDataRetriever.RequestChannelFactory.
CreateChannel(new EndpointAddress(endpointAddress));
}
}
मेरा सवाल है, क्या यह एक अच्छा डिज़ाइन है? मुझे लगा कि एक बार ChannelFactory
बनाया गया है, मुझे थ्रेड-सुरक्षा के बारे में चिंता करने की आवश्यकता नहीं है क्योंकि मैं केवल CreateChannel()
पर कॉल करने के लिए इसका उपयोग कर रहा हूं लेकिन क्या मुझे गलती है? क्या यह राज्य बदल रहा है या अन्यथा दृश्यों के पीछे कुछ फंकी कर रहा है जो थ्रेडिंग मुद्दों का कारण बन सकता है? साथ ही, मुझे लगता है कि मैन्युअल ChannelFactory
के disposes या मैं मान सकते हैं कि जब भी आईआईएस रिबूट हो जाता है यह मेरे लिए सब सफाई काम करूँगा कहीं में कुछ कोड डाल करने के लिए (स्थिर finalizer?) की जरूरत है?
संबंधित: ChannelFactory Reuse Strategies
मुझे एक दास गोरा आलेख मिला जो एक ही चीज़ को इंगित करता है - http://www.dasblonde.net/PermaLink.aspx?guid=c7922cb4-26d4-408b-b029-cfadd75ff954। हालांकि, "आपके लिए जेनरेट किए गए शब्द" ने मुझे पूरे क्लाइंटबेस पर थोड़ा सा दृष्टिकोण दिया है। फिर भी, मुझे लगता है कि आप इसके साथ निशान पर हैं। –
एक और डब्ल्यूसीएफ समस्या के लिए शोध करते समय मैंने क्लाइंटबेस पर क्लाइंटबेस पर चैनलफैक्टरी का समर्थन करने का एक अच्छा कारण खोजा - http://stackoverflow.com/questions/2252747/what-is-system-servicemodel-diagnostics-callbackexception-and-why-cant -आई-हैंडल –
@ रेपो मैन: यदि आप पसंद करते हैं, लेकिन अपवादों को फिर से लपेटना सबसे अच्छा अभ्यास नहीं है जब तक आपके पास ऐसा करने का अच्छा कारण न हो। डब्ल्यूसीएफ में इस प्रकृति की त्रुटियों के लिए, मुझे विश्वास नहीं है कि यह अपवादों को फिर से लपेटने के लिए अर्हता प्राप्त करता है। – casperOne