سؤال

وأنا في محاولة لمعرفة كيفية التعامل مع الأخطاء بقوة مصادقة الوكيل (HTTP كود 407 حالة) عند استخدام الطبقة System.Net.WebClient.

في هذا المجال، ونحن نرى العديد من المستخدمين تلقي مصادقة 407 وكيل WebException، ولكن لست متأكدا ما هي استراتيجية الافتراضي جيدة. في الشباك 2.0 / 3.5، من المفترض أن تكون موروثة من إعدادات مصادقة الوكيل إعدادات نظام إنترنت إكسبلورر. فايرفوكس، أوبرا وكروم استخدام هذه نفس الإعدادات.

وهنا هو رمز الأساسي الذي تستخدمه:

using System.Net;

string url = "http://www.mysite.com";
WebClient webClient = new WebClient();
byte[] data = webClient.DownloadFile(url);

وعندما يفشل هذا الرمز، نفتح متصفح المستخدم وإرسالها إلى مساعدة الصفحة. من سجلات الويب لدينا، ونحن نعلم أن هؤلاء العملاء الاتصال بنجاح في برامج التصفح الخاصة بهم. ربما انهم يدخلون اسم المستخدم وكيل الخاصة بهم يدويا و كلمة المرور قبل ان نصل الى صفحة المساعدة لدينا؟ نحن لا نعرف.

ويبدو أننا يمكن أن تستخدم WebClient.UseDefaultCredentials، ولكن هذا يبدو زائدة إذا WebClient يستخدم إعدادات النظام على أي حال.

وهو محل تقدير أي مساعدة.

هل كانت مفيدة؟

المحلول

وإنترنت إكسبلورر لا بإصرار مخبأ / إعادة استخدام أوراق اعتماد مصادقة الوكيل إذا كانت المصادقة وكيل يستخدم الأساسية أو الهضم. للتفاوض / NTLM، وسيتم توفير بيانات الاعتماد الافتراضية.

وبالتالي، على الرغم من. NET يرث من إعدادات IE، أنك لن تحصل على أي دعم "الحرة" للمصادقة الوكيل للتعليم الأساسي / دايجست إلا إذا كنت يحدث أن تكون قيد التشغيل في IE. ستحتاج إلى مطالبة المستخدم أو توفير شاشة التكوين.

وعازف الكمان (www.fiddler2.com) لديه الخيار "طلب مصادقة الوكيل" في القائمة القواعد التي يمكنك استخدامها لمحاكاة هذا السيناريو للاختبار.

نصائح أخرى

ونحن حلها هذه المشكلة عن طريق إضافة الحوار التكوين التي alows للمستخدم لاختيار "استخدام وكيل". إذا ويتم هذا الإعداد نستخدم هذه المعلمة (العنوان، أوراق اعتماد ...). إن لم يكن - ونحن نفترض أن الاتصال يمكن أن تكون دون أي تدخل يدوي. في حالة وجود خطأ نقوم به: أ.) وحاول مرة أخرى باستخدام بيانات اعتماد الافتراضي ب.) المنبثقة من المعلومات التي إعداد في التكوين يمكن أن يساعد ...

إذا يتم مصادقة الوكيل عبر "بيانات الاعتماد الافتراضية" (مستخدم Windows) يتفاعل IE أيضا إلى وجود خطأ المصادقة ويرسل بيانات الاعتماد الافتراضية في هذه الحالة. إذا لم ينجح هذا الإجراء يفتح مربع حوار أوراق اعتماد. أنا لست متأكدا مما اذا كان جميع المتصفحات التعامل مع هذا بهذه الطريقة - ولكن يمكنك ببساطة محاولة إعطائها باستخدام العابث، حتى تتمكن من رؤية ما يحدث

.

وأنا أعلم أن هذه هي وظيفة العمر ولكن كان لدي مشكلة مماثلة تحاول تحميل ملف XML باستخدام WebClient في مهمة النصي SSIS 2008R2 (SQL خادم خدمات تكامل) (قانون VB.NET) من خلال ملقم وكيل إلى موقع بعيد تأمينها عبر SSL التي تتطلب أيضا مصادقة.

واستغرق بعض الوقت لإيجاد حل، وساعد هذا المنصب على الجانب الوكيل. وفيما يلي التعليمات البرمجية النصية التي عملت بالنسبة لي. قد تكون مفيدة للأشخاص الذين يبحثون عن ما شابه ذلك.

    Dim objWebClient As WebClient = New WebClient()
    Dim objCache As New CredentialCache()

    'https://www.company.net/xxxx/resources/flt
    Dim strDownloadURL As String = Dts.Variables("FileURL").Value.ToString

    'apiaccount@company.net
    Dim strLogin As String = Dts.Variables("FileLogin").Value.ToString

    'sitepassword
    Dim strPass As String = Dts.Variables("FilePass").Value.ToString

    'itwsproxy.mycompany.com
    Dim strProxyURL As String = Dts.Variables("WebProxyURL").Value.ToString

    '8080
    Dim intProxyPort As Integer = Dts.Variables("WebProxyPort").Value

    'Set Proxy & Credentials as a Network Domain User acc to get through the Proxy
    Dim wp As WebProxy = New WebProxy(strProxyURL, intProxyPort)
    wp.Credentials = New NetworkCredential("userlogin", "password", "domain")
    objWebClient.Proxy = wp

    'Set the Credentials for the Remote Server not the Network Proxy
    objCache.Add(New Uri(strDownloadURL), "Basic", New NetworkCredential(strLogin, strPass))
    objWebClient.Credentials = objCache

    'Download file, use Flat File Connectionstring to save the file
    objWebClient.DownloadFile(strDownloadURL, Dts.Connections("XMLFile").ConnectionString)
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top