ServiceAuthorizationManager
के साथ ऐसा करना एक चतुर तरीका उपलब्ध नहीं है, और यह सभी IDispatchMessageInspector
की गंभीरता से कड़ी मेहनत की तुलना में कहीं अधिक आसान है।
इसलिए की तरह अपने WCF सेवा परियोजना में एक कक्षा बनाएं:
public class MyServiceAuthorizationManager : ServiceAuthorizationManager
{
protected override bool CheckAccessCore(OperationContext operationContext)
{
string classMethod = operationContext.RequestContext.RequestMessage.Headers.Action;
if (classMethod.Contains("/transfer/Get"))
{
return true; // because someone is simply updating a client service reference
}
Console.WriteLine("Class Method Call: {0}",classMethod);
// do something with operationContext here as you need to inspect stuff
// return true if you want this class method call to succeed and go through
// return false if you want this class method to fail on the client
return true;
}
}
फिर, अपनी सेवा में, सही अपने host.Open()
कॉल करने से पहले, लिंक MyServiceAuthorizationManager
में जोड़ें।
ServiceHost host = new ServiceHost(typeof(MyProject.Service1));
host.Authorization.ServiceAuthorizationManager = new MyServiceAuthorizationManager();
host.Open();
अब जब आप अपने क्लाइंट कनेक्शन का परीक्षण करते हैं, तो आप देखेंगे कि कंसोल आउटपुट किस वर्ग विधि को बुलाया गया था। आप ऑपरेशन कॉन्टेक्स्ट ऑब्जेक्ट में सभी चीजों के खिलाफ भी काम कर सकते हैं।
एक तरीका मैं इसका उपयोग सुरक्षा हेडर चेक के लिए करता हूं। मेरे क्लाइंट में, मैं एक हेडर जोड़ता हूं। फिर, सेवा में, इस CheckAccessCore()
कॉल में, मैं सत्यापित करता हूं कि यह कस्टम हेडर मौजूद है। यदि ऐसा नहीं होता है, तो मैं झूठी वापसी करता हूं। यह सुरक्षा की एक और परत है जो हैकर्स को बाहर रखती है, और नामित पाइप्स कॉन्फ़िगरेशन में सीमित सुरक्षा के लिए भी बहुत अच्छी है। यदि आप ऐसा करना चाहते हैं, तो click here कस्टम हेडर जोड़ने के तरीके के बारे में अधिक जानकारी के लिए जो सेवा पर प्रत्येक क्लाइंट की विधि कॉल पर स्वचालित रूप से भेजा जाता है।
और ध्यान दें, इन सभी के बीच, मुझे व्यवहार, दावे, श्रोताओं, या संदेश प्रेषण के साथ गड़बड़ नहीं करना पड़ा। मुझे अपने डब्ल्यूसीएफ कॉन्फ़िगरेशन को संपादित करने की भी आवश्यकता नहीं थी।
ऊपर /transfer/Get
के लिए स्ट्रिंग चेक नोट करें। यह महत्वपूर्ण है यदि आप एक सुरक्षा तंत्र के रूप में हेडर चेक कर रहे हैं जैसे मैं था। यदि आपके पास वह स्थिति नहीं है और सत्य वापस आती है, तो आपका डब्ल्यूसीएफ क्लाइंट आईडीई ServiceReference
अपडेट नहीं कर सकता है क्योंकि आईडीई उस अतिरिक्त शीर्षलेख के बारे में नहीं जानता है (यदि आप कस्टम हेडर जोड़ रहे हैं और उस हेडर को निर्दिष्ट नहीं करते हैं डब्ल्यूसीएफ ग्राहक का app.config)। अन्यथा, आपको एक त्रुटि The URI prefix is not recognized
मिलेगी।
आप डब्ल्यूसीएफ [इंस्पेक्टर] में निरीक्षकों का उपयोग कर सकते हैं (https://web.archive.org/web/20120207232924/http://cgeers.com:80/2008/11/09/wcf-extensibility-parameter -इंस्पेक्टर /) – dhinesh
@ दिनेशेश से ऊपर टिप्पणी लिंक मैलवेयर के साथ एक पृष्ठ लोड करना चाहता था और चाहता था कि मैं क्रोम एक्सटेंशन इंस्टॉल करना चाहता हूं। मैंने इसे मॉडरेटर को बताया है। – Volomike
मैं सुझाव देना चाहता हूं कि आप एएसपीनेट टैग को हटा दें क्योंकि आपका प्रश्न एएसपीनेट से बहुत व्यापक है और सी # कोडर्स और वीबी कोडर्स के लिए भी बहुत उपयोगी हो सकता है। – Volomike