2009-11-04 8 views
6

मेरे पास एक क्लाइंट प्रोग्राम है जो एक वेब सेवा का उपभोग करता है। यह कई प्रतिष्ठानों में काफी अच्छी तरह से काम करता है। अब मेरे पास एक ऐसी स्थिति है जहां एक नया ग्राहक प्रॉक्सी सर्वर के माध्यम से इंटरनेट से कनेक्ट होता है, और मेरे प्रोग्राम के वेब सेवा तक पहुंचने का प्रयास "HTTP स्थिति 407: प्रॉक्सी प्रमाणीकरण आवश्यक" त्रुटि प्राप्त करता है।सी # में डब्ल्यूसीएफ क्लाइंट का उपयोग करते हुए, इंटरनेट प्रॉक्सी सर्वर के माध्यम से वेब सेवा का उपभोग करना; प्रॉक्सी सर्वर प्रमाणीकरण प्रदान करना

मैंने सोचा कि प्रॉक्सी सर्वर पता, पोर्ट नंबर और प्रमाणीकरण सहित इंटरनेट एक्सेस की सभी कॉन्फ़िगरेशन नियंत्रण कक्ष इंटरनेट विकल्प में की जाएगी, और मुझे कोड में या इसके बारे में चिंता करने की ज़रूरत नहीं होगी वेब सेवा क्लाइंट के app.config में।

क्या मुझे यह सब गलत मिला है?

मैं मतलब समय में क्या किया उपयोगकर्ता प्रॉक्सी उपयोगकर्ता नाम और पासवर्ड कॉन्फ़िगर करने के लिए मौका देना है, और फिर मेरी कोड में मैं निम्न करें:

webServiceClient.ClientCredentials.UserName.UserName = configuredUsername; 
webServiceClient.ClientCredentials.UserName.Password = configuredPassword; 

लेकिन मैं नहीं जानता कि यह सही बात है। क्योंकि ऐसा लगता है कि उपरोक्त क्लाइंट क्रेडेंशियल वेब सेवा बाध्यकारी/सुरक्षा का संदर्भ लेंगे, न कि इंटरनेट प्रॉक्सी सर्वर पर।

मुझे लगता है कि मैं इसे ग्राहक पर आजमा सकता हूं, लेकिन मुझे यह सुनिश्चित करना होगा कि मैं पहले क्या कर रहा हूं।

उत्तर

6

मुझे पता चला कि इस बात को कैसे किया जाए, किसी अन्य फोरम में योगदानकर्ता की मदद से जो कि मैं भूल गया हूं, सभी प्रकार की कोशिश करने की झुकाव में। तो अब उस भूल गए व्यक्ति को धन्यवाद।

यहाँ कोड है कि अंत में काम किया है (उपयुक्त रूप में प्रच्छन्न है, लेकिन सही विचार देता है):

BasicHttpBinding binding = new BasicHttpBinding("APISoap"); /* APISoap is the name of the binding element in the app.config */ 
    binding.Security.Mode = BasicHttpSecurityMode.TransportCredentialOnly; 
    binding.Security.Transport.ProxyCredentialType = HttpProxyCredentialType.Basic; 
    binding.UseDefaultWebProxy = false; 
    binding.ProxyAddress = new Uri(string.Format("http://{0}:{1}", proxyIpAddress, proxyPort)); 
    EndpointAddress endpoint = new EndpointAddress("http://www.examplewebservice/api.asmx"); 

    WebServiceClient client = new WebServiceClient(binding, endpoint); 

    client.ClientCredentials.UserName.UserName = proxyUserName; 
    client.ClientCredentials.UserName.Password = proxyPassword; 
+2

क्या होगा यदि वेब सेवा का अपना क्रेडेंशियल्स की आवश्यकता है, तो आप उन्हें प्रॉक्सी के साथ जोड़ने के लिए कैसे जानते हो लॉग इन करें? –

+0

यह समाधान तब काम कर रहा है जब सेवा और प्रॉक्सी को समान प्रमाण-पत्र की आवश्यकता होती है, लेकिन यदि दोनों को अपने स्वयं के प्रमाण-पत्र की आवश्यकता होती है तो क्रेडेंशियल कैसे सेट करें। एनटीएलएम प्रमाणित प्रॉक्सी के मामले में क्या परिवर्तन किए जाने की आवश्यकता है? – wintersolider

+0

@net_prog और अजय: मुझे खेद है, मैं वास्तव में जवाब नहीं दे सकता कि पूरी तरह से अनुसंधान किए बिना। मैं 5 साल पहले अपना समाधान काम करने में कामयाब रहा और तब से इस तरह की चीज़ को फिर कभी नहीं देखा। – Peter