2010-01-19 13 views
6

में उपयोगकर्ता ऑब्जेक्ट को कैसे सहेजना है मेरे पास एक ऐसी सेवा है जो एक कस्टम "UserNamePasswordValidator" का उपयोग करती है और इसे सत्यापित उपयोगकर्ता ऑब्जेक्ट को बाद में सेवा में पुनर्प्राप्त करने में सक्षम होने की आवश्यकता होती है। मैं यह कैसे कर सकता हूँ? या मैं बाद में सेवा में उपयोगकर्ता के प्रमाण पत्र कैसे प्राप्त कर सकता हूं?डब्ल्यूसीएफ

/विक्टर

उत्तर

3

संक्षिप्त उत्तर है कि सबसे सही विकल्प एक IPrincipal उदाहरण है जो प्रमाणीकृत उपयोगकर्ता का प्रतिनिधित्व करता है बना सकते हैं और Thread.CurrentPrincipal पर डाल करने के लिए है।

सेवा में बाद में उसी थ्रेड पर चल रहे सभी कोड थ्रेड.कुरेंट प्रिंसिपल के माध्यम से प्रमाणीकृत उपयोगकर्ता तक पहुंच पाएंगे।

यह .NET (और इसलिए डब्ल्यूसीएफ में भी) में प्रमाणीकृत उपयोगकर्ताओं से निपटने का मानक तरीका है।

6

यह इतना आसान नहीं है। समस्या यह है कि कस्टम UserNamePasswordValidator को AuthorizationPolicy.Evaluate() और कहीं बीच में बुलाया जाता है, डब्ल्यूसीएफ थ्रेड.कुरेंट प्रिंसिपल को ही शुरू करता है। मैंने इसे पासवर्ड सत्यापनकर्ता के अंदर सेट करने का प्रयास किया है, लेकिन यह काम नहीं करता है, प्रारंभिक प्रिंसिपल बनने पर डब्लूसीएफ द्वारा इसे तुरंत गिरफ्तार किया जाता है। एकमात्र तरीका यह है कि मैं इसे काम कर सकता हूं, अगर मैं प्रतीक्षा करता हूं और थ्रेड सेट करता हूं। AuthorPoint.CalrentPrincipal AuthorizationPolicy.Evaluate() विधि में।

मैं एक डब्ल्यूसीएफ गुरु को यह समझाना चाहता हूं क्योंकि मुझे इस तरह के कई डब्ल्यूसीएफ शुरुआती लोगों के साथ एक ही समस्या है और मैं इसे डब्ल्यूसीएफ डिजाइन में एक दोष के रूप में देखता हूं।