2011-09-20 10 views
5

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

यदि यह एक पृष्ठ था तो मैं एक बेस पेज ऑब्जेक्ट लिखूंगा लेकिन मुझे यकीन है कि अगर डब्ल्यूसीएफ कॉल पर घटनाएं होती हैं तो मुझे यकीन नहीं है?

+0

आप डब्ल्यूसीएफ [इंस्पेक्टर] में निरीक्षकों का उपयोग कर सकते हैं (https://web.archive.org/web/20120207232924/http://cgeers.com:80/2008/11/09/wcf-extensibility-parameter -इंस्पेक्टर /) – dhinesh

+0

@ दिनेशेश से ऊपर टिप्पणी लिंक मैलवेयर के साथ एक पृष्ठ लोड करना चाहता था और चाहता था कि मैं क्रोम एक्सटेंशन इंस्टॉल करना चाहता हूं। मैंने इसे मॉडरेटर को बताया है। – Volomike

+0

मैं सुझाव देना चाहता हूं कि आप एएसपीनेट टैग को हटा दें क्योंकि आपका प्रश्न एएसपीनेट से बहुत व्यापक है और सी # कोडर्स और वीबी कोडर्स के लिए भी बहुत उपयोगी हो सकता है। – Volomike

उत्तर

3

डब्ल्यूसीएफ आपको स्टैक में जोड़े गए इंटरसेप्टर्स को लागू करने की अनुमति देता है। उदाहरण के लिए यह link देखें। मुझे यकीन नहीं है कि यह आपको प्रेषक आईपी निकालने की अनुमति देता है लेकिन मुझे लगता है कि यह एक कोशिश के लायक है।

1

आप कस्टम व्यवहार का उपयोग कर सकते हैं, वे डब्ल्यूसीएफ एक्सटेंसिबिलिटी फीचर्स का हिस्सा हैं। यहां अधिक जानकारी दी गई है: Extending WCF with Custom Behaviors

3

आप IDispatchMessageInspector को कार्यान्वित कर सकते हैं और ऐसा कुछ कर सकते हैं।

public object AfterReceiveRequest(ref Message request, 
IClientChannel channel, InstanceContext instanceContext) 
    { 
     RemoteEndpointMessageProperty remoteEndpoint = request.Properties 
    [RemoteEndpointMessageProperty.Name] as RemoteEndpointMessageProperty; 

     //remoteEndpoint.Address will give you the address. 

     return null; 
    } 
+0

क्या 'host.Open()' कॉल से पहले डब्ल्यूसीएफ सेवा में इसे संलग्न करने का कोई आसान तरीका है? एकमात्र चीज मैंने देखी थी कि मुझे एक विशेष व्यवहार, बाध्यकारी, और फिर संदेश निरीक्षक बनाना था। मैंने अपने बालों को बाहर निकालने की कोशिश कर बाहर निकाल दिया और आखिरकार छोड़ दिया। तब मैंने 'सेवा प्राधिकरण प्रबंधक' की खोज की। – Volomike

1

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 मिलेगी।

संबंधित मुद्दे