2010-11-17 24 views
6

में प्रॉक्सी प्रमाणीकरण संवाद प्रदर्शित करें मैं प्रॉक्सी के पीछे हूं जिसके लिए प्रमाणीकरण की आवश्यकता है। मैं जानता हूँ कि यह इस तरह प्रॉक्सी के नेटवर्क क्रेडेंशियल पारित करने के लिए काफी सरल है:इंटरनेट का उपयोग करने के लिए सी #

FtpWebRequest request = FtpWebRequest.Create(
         new Uri("ftp://upload.myserver.com") as FtpWebRequest; 

NetworkCredential credentials = new NetworkCredential("username", "password"); 
request.Credentials = credentials; 

यह काम करता है!

मैंने CredentialCache.DefaultNetworkCredentials का उपयोग करने की भी कोशिश की लेकिन यह काम नहीं करता है। मैं कहीं भी उपयोगकर्ता नाम और पासवर्ड संग्रहीत करना चाहता हूं (कोड, डेटाबेस, कॉन्फ़िगरेशन फ़ाइल)।

मैंने सोचा कि इंटरनेट एक्सप्लोरर का उपयोग कर इंटरनेट तक पहुंचने पर प्रदर्शित होने वाले एक ही संवाद का उपयोग करने का सबसे आसान तरीका होगा। क्या कोई जानता है कि इस संवाद को कैसे उठाया जाए?

http://services.arcgisonline.com/arcgisexplorer500/help/proxy_connect_to_on_browser_request.png

संपादित

इस कार्य को करने के लक्ष्य के FTP के माध्यम से एक फ़ाइल अपलोड करने गया था। अंततः मुझे पता चला कि एफ़टीपी अनुरोधों के लिए प्रॉक्सी सेट करना जरूरी नहीं है क्योंकि .NET Framework HTTP प्रॉक्सी के माध्यम से एफ़टीपी ऑपरेशन की अनुमति नहीं देता है। लेकिन आपको प्रॉक्सी प्रॉपर्टी को स्पष्ट रूप से शून्य पर सेट करना होगा।

FtpWebRequest request = FtpWebRequest.Create(
         new Uri("ftp://upload.myserver.com") as FtpWebRequest; 

NetworkCredential credentials = new NetworkCredential("username", "password"); 
request.Credentials = credentials; 
request.Proxy = null; 

यह बात है!

+0

मुझे आपके प्रश्न का उत्तर देने के लिए इस विषय पर पर्याप्त ज्ञान नहीं है, तो बस एक लॉगिन फॉर्म तैयार करेगा जहां आपको कनेक्ट करने से पहले अपना उपयोगकर्ता नाम और पासवर्ड दर्ज करना होगा। – Nick

+0

हाय निक, निश्चित रूप से यह करना आसान होगा, लेकिन मेरे लिए यह पहिया को फिर से शुरू करने जैसा लगता है। यहां तक ​​कि [एमएसडीएन] में भी (http://msdn.microsoft.com/en-us/library/aa983441.aspx) इस संवाद का उल्लेख किया गया है। – Jan

उत्तर

2

पहले, आईडी कहना है कि यह एक IE डायलॉग नहीं है। यह एक बिल्डिन सिस्टम संवाद होना चाहिए।
आगे यदि आप इसे आमंत्रित करते हैं, तो आपको अभी भी दर्ज मूल्यों तक पहुंचने और अपने कोड में उन लोगों का उपयोग करने की आवश्यकता होगी। वह संवाद सिर्फ एक इनपुट विंडो है, यह आपके एप्लिकेशन को प्रॉक्सी/इंटरनेट तक पहुंच नहीं देगा! इसके अलावा सभी त्रुटि प्रबंधन (गलत, प्रमाण पत्र, आदि) स्वयं ही किया जाना है।
मुझे लगता है कि यह जांचना आसान हो सकता है कि प्रॉक्सी की आवश्यकता है (विंडोज रजिस्ट्री, Wmi, आदि का उपयोग करके) और एक कस्टम फॉर्म पॉप अप करें जहां आप आसानी से मूल्यों का उपयोग और पुन: उपयोग कर सकते हैं।

+0

मैंने सोचा कि ऐसा करना आसान होगा, जैसे कि फ्रेमवर्क विधि को कॉल करना जो नेटवर्क कनेक्शन को स्वयं जांचता है और संवाद को स्वयं पॉप करता है। आखिरकार आप बिल्कुल सही हैं! मैंने इसे स्वयं किया और जहां तक ​​मैं देख सकता हूं कि प्रत्येक प्रोग्राम अपने स्वयं के प्रॉक्सी प्रमाणीकरण संवाद (फ़ायरफ़ॉक्स, कैस्पर्सकी इत्यादि) के साथ आता है। – Jan

0

शायद यह आपकी मदद कर सकता है। सुनिश्चित नहीं है कि यह वही है जो आप खोज रहे हैं।

सभी की

http://sturla.simnet.is/post/2008/09/22/Enable-proxy-in-IE.aspx

+0

धन्यवाद, लेकिन यह वह चीज़ नहीं है जिसे मैं देख रहा हूं। आखिर में मैंने कहीं और संवाद प्रदर्शित किया जो मैं प्रदर्शित करना चाहता हूं। – Jan

3

MSDN लेख में "Handling Authentication", लेखक लिखते हैं:

प्रॉक्सी प्रमाणीकरण

जब एक ग्राहक एक प्रॉक्सी कि प्रमाणीकरण की आवश्यकता है उपयोग करने के लिए प्रयास करता है, प्रॉक्सी एक 407 स्थिति कोड लौटाने ग्राहक को संदेश । उस संदेश में, प्रॉक्सी में एक या अधिक प्रॉक्सी-प्रमाणीकरण प्रतिक्रिया शीर्षलेख शामिल होना चाहिए। इन शीर्षकों में प्रॉक्सी से उपलब्ध प्रमाणीकरण विधियां शामिल हैं। WinINet पहली विधि को पहचानता है जो इसे पहचानता है।

InternetErrorDlg function इस्तेमाल किया जा सकता उपयोगकर्ता, या एक अनुकूलित यूजर इंटरफेस डिजाइन किया जा सकता से उपयोगकर्ता नाम और पासवर्ड डेटा प्राप्त करने के लिए।

एक छोटा सा लंबे समय तक खोज के बाद, मैं Microsoft ज्ञानकोष लेख "How To Handle Proxy Authorization with WinInet" जो कैसे इस सुविधा का उपयोग करने के लिए प्रॉक्सी उपयोगकर्ता को प्रमाणित करने पर एक उदाहरण देता है पाया।

if (InternetErrorDlg (GetDesktopWindow(), 
     hReq, ERROR_INTERNET_INCORRECT_PASSWORD, 
     FLAGS_ERROR_UI_FILTER_FOR_ERRORS | 
     FLAGS_ERROR_UI_FLAGS_GENERATE_DATA | 
     FLAGS_ERROR_UI_FLAGS_CHANGE_OPTIONS, 
     NULL) == ERROR_INTERNET_FORCE_RETRY) 
      goto again; 

(एक पी के लिए this MSDN blog post देखें/InternetErrorDlg समारोह के उदाहरण आह्वान):

वे के साथ एक (C++) उदाहरण कोड प्रदान करते हैं।

"हैंडलिंग प्रमाणीकरण" लेख में आगे कहा गया:

एक कस्टम इंटरफेस InternetSetOption function का उपयोग INTERNET_OPTION_PROXY_PASSWORD और INTERNET_OPTION_PROXY_USERNAME मूल्यों को निर्धारित करने के लिए और उसके बाद प्रॉक्सी अनुरोध पुनः भेजें करने के लिए कर सकते हैं।

तो मैं यह मान लेगा कि निम्नलिखित "कार्यप्रवाह" सफल हो सकते हैं:

  1. प्रॉक्सी request.Proxy = WebRequest.GetSystemWebProxy() की तरह कुछ के साथ डिफ़ॉल्ट प्रॉक्सी का उपयोग करने पर सेट करें।
  2. HttpWebRequest (या FtpWebRequest) के साथ अनुरोध URL।
  3. यदि 407 HTTP स्थिति कोड वापस आ गया है, तो InternetErrDlg फ़ंक्शन पर कॉल करें।
  4. यूआरएल अनुरोध पुनः प्रयास करें।

यह सकता है this answer कहा गया है कि वह सफलतापूर्वक WebRequest इस्तेमाल किया जब वह अभी हाल ही में इंटरनेट एक्सप्लोरर खोला और वहां अपनी प्रॉक्सी क्रेडेंशियल्स में प्रवेश के बाद से काम करते हैं।

तो मेरी धारणा यह है कि प्रॉक्सी जानकारी को "उपयोगकर्ता सत्र" में कहीं भी संग्रहीत किया जाता है जब तक उपयोगकर्ता लॉग इन होता है, और प्रमाणीकरण के बाद सभी अनुप्रयोगों के लिए उपलब्ध होता है।

चूंकि मुझे मूल पोस्टर के समान समस्या का सामना करना पड़ रहा है, इसलिए अब मैं यह देखने की कोशिश करूंगा कि मेरे सुझाव वास्तव में कैसे काम करते हैं।

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