पर कॉल करते समय HTTP 407 प्रॉक्सी प्रमाणीकरण त्रुटि मैं एक .NET ऐप पर काम कर रहा हूं जो इंटरनेट पर तृतीय पक्ष वेब सेवाओं को कॉल करता है। सेवाएं SOAP का उपयोग नहीं करती हैं, इसलिए हम मैन्युअल रूप से एक XML अनुरोध दस्तावेज़ बनाते हैं, इसे HTTP के माध्यम से सेवा में भेजते हैं, और एक XML प्रतिक्रिया पुनर्प्राप्त करते हैं।वेब सेवा
हमारा कोड एक विंडोज सेवा है जो एक सामान्य विंडोज डोमेन खाते के संदर्भ में चलाया जाता है, और एनटीएलएम प्रमाणीकरण की आवश्यकता के लिए कॉन्फ़िगर किए गए प्रॉक्सी सर्वर (माइक्रोसॉफ्ट आईएसए सर्वर) के पीछे बैठता है। हमारे सेवा को चलाने वाले खाते में प्रॉक्सी सर्वर के माध्यम से इंटरनेट तक पहुंचने की अनुमति है।
कोड इस तरह दिखता है:
// Create the request object.
HttpWebRequest request = (HttpWebRequest) WebRequest.Create(url);
request.Method = "POST";
// Configure for authenticating proxy server requiring Windows domain credentials.
request.Proxy = New WebProxy(proxyAddress) { UseDefaultCredentials = true };
// Set other required headers.
request.Accept = acceptableMimeType;
request.Headers.Add(HttpRequestHeader.AcceptCharset, acceptableCharset);
request.Headers.Add(HttpRequestHeader.AcceptEncoding, "none");
request.Headers.Add(HttpRequestHeader.AcceptLanguage, "en-gb");
request.Headers.Add(HttpRequestHeader.CacheControl, "no-store");
request.Headers.Add(HttpRequestHeader.ContentEncoding, "none");
request.Headers.Add(HttpRequestHeader.ContentLanguage, "en-gb");
request.ContentType = requestMimeType;
request.ContentLength = requestBytes.Length;
// Make the method call.
using(Stream stream = request.GetRequestStream()) {
stream.Write(requestBytes, 0, requestBytes.Length);
}
HttpWebResponse response = (HttpWebResponse) request.GetResponse();
// Extract the data from the response without relying on the HTTP Content-Length header
// (we cannot trust all providers to set it correctly).
const int bufferSize = 1024 * 64;
List<byte> responseBytes = new List<byte>();
using(Stream stream = new BufferedStream(response.GetResponseStream(), bufferSize)) {
int value;
while((value = stream.ReadByte()) != -1) {
responseBytes.Add((byte) value);
}
}
यह ठीक काम करता है, तो प्रॉक्सी सर्वर बंद कर दिया है, या URL प्रमाणीकरण की आवश्यकता नहीं के रूप में श्वेतसूचीबद्ध किया गया है, लेकिन जैसे ही प्रमाणीकरण सक्रिय है, यह हमेशा विफल रहता है एक HTTP 407 त्रुटि के साथ।
मैंने उपर्युक्त कोड को परीक्षण दोहन में रखा है, और बिना किसी सफलता के request.Proxy
संपत्ति को कॉन्फ़िगर करने के लिए हर विधि की कोशिश की।
मैंने तब देखा कि सभी तृतीय पक्ष वेब सेवाओं को जिन्हें हमें कॉल करना है, वे HTTPS हैं। जब मैंने उन्हें HTTP के रूप में एक्सेस करने का प्रयास किया, तो प्रॉक्सी प्रमाणीकरण काम करना शुरू कर दिया। क्या कुछ अतिरिक्त उछाल है मुझे प्रॉक्सी प्रमाणीकरण और एचटीटीपीएस को अच्छी तरह से खेलने के लिए कूदना है?
पीएस: ओपन सोर्स स्मूथवॉल प्रॉक्सी सर्वर के साथ एक ही समस्या होती है, इसलिए मैं इसे आईएसए सर्वर में एक बग के रूप में नहीं लिख सकता।
पीपीएस: मुझे पता है कि आप app.config
में प्रॉक्सी सेटिंग्स कॉन्फ़िगर कर सकते हैं, लेकिन (ए) कोड में इसे करने से कोई फर्क नहीं पड़ता है, और (बी) एप्लिकेशन डिज़ाइन की आवश्यकता है कि हम प्रॉक्सी सेटिंग्स को पढ़ लें रनटाइम पर डेटाबेस।
जो मेरे मामले में बिल्कुल होता है। कुछ समय मैं इस त्रुटि के बिना कनेक्ट करने में सक्षम हूं। –
जो इस पर घूमते हैं उनके लिए समस्या निवारण युक्ति के रूप में पोस्ट करना: यह प्रॉक्सी सर्वर कॉन्फ़िगर/सॉफ़्टवेयर हो सकता है, लेकिन इस तरह के अंतःस्थापित मुद्दों में पहली जांच आंशिक क्लस्टर विफलता को खत्म कर देती है। यदि लोड बैलेंसर के पीछे कई प्रॉक्सी सर्वर हैं, और केवल एक को ठीक से कॉन्फ़िगर किया गया है, तो आप केवल "अच्छा" उदाहरण, उर्फ को संतुलित करते समय ही प्राप्त करेंगे। कभी कभी। – Barryrowe