سؤال

أدعو طريقة في خدمة ويب من خلف خادم وكيل باستخدام التعليمات البرمجية التالية:

myWebService.TestWebService webservice = new myWebService.TestWebService();
webservice.Url = "http://test.com/webservice?wsdl";

WebProxy proxy = new WebProxy("1.2.3.4", 8080);
proxy.Credentials = new NetworkCredential("username", "password");
webservice.Proxy = proxy;

string response = webservice.TestWebMethod();

هذا يعمل بشكل جيد عند استخدام HTTP، أحصل على الاستجابة التي أتوقعها في سلسلة "الاستجابة". ومع ذلك - إذا قمت بتغيير عنوان URL ل https. ثم أحصل على (401) غير مصرح به استجابة.

إذا وضعت عنوان URL في متصفحي، فهذا يعمل بشكل جيد باستخدام HTTP أو HTTPS.

لقد أضفت رمز لمعالجة التحقق من صحة شهادة SSL عن طريق إنشاء System.Net.ServicePointManager.ServerCertificateValidationCallback مندوب ولكن الكود لا يحصل أبدا على هذا الأمر. يتم رفض الطلب قبل التحقق من صحة الشهادة أو حتى يبدو.

أي مساعدة بتقدير حقا...

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

المحلول

هل تحتاج إلى بيانات اعتماد للتنقل إلى عنوان URL SSL؟
إذا كان الأمر كذلك، فأنت بحاجة إلى مجموعة بيانات اعتماد خدمة الويب.

هل حاولت إضافة مرجع ويب في Visual Studio باستخدام عنوان URL SSL؟
إذا لم تتمكن من إضافة مرجع ويب من خلال Visual Studio، فلن يعمل التعليمات البرمجية أيضا.

هل يمكنك التأكد من أن آخر شيء قمت بتعيينه هو الوكيل (مثل تغيير عنوان URL قبل تعيين الوكيل)؟
هناك فرصة صغيرة يمكن أن تضيع الوكيل، يجب أن يكون هذا هو آخر شيء لمحاولة

نصائح أخرى

فيما يلي مثال باستخدام Cert Cert (أنا متأكد من أنك لا تحتاج)، ولكن قد يوفر بعض البصائل واستخدام بيانات الاعتماد إلى خدمة ويب.

WebService.ManageOutboundDelivery oWS = new WebService.ManageOutboundDelivery();

if (My.Settings.HasClientCert == true) {
    X509Certificate2 signedCert = new X509Certificate2(HttpContext.Current.Server.MapPath(My.Settings.ClientCertName), My.Settings.ClientCertPW);
    oWS.ClientCertificates.Add(signedCert);
}

System.Net.CredentialCache oCred = new System.Net.CredentialCache();
Net.NetworkCredential netCred = new Net.NetworkCredential(My.Settings.WebServiceUID, My.Settings.WebServicePW);

oCred.Add(new Uri(oWS.Url), "Basic", netCred);
oWS.Credentials = oCred;

هل قمت أيضا بالتحقق من SSL CERT صالحة - أظن أنك سترى هذا عندما تضربها عبر المتصفح ولكن قد تسبب مشكلة في محاولة ضربها برمجيا.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top