Вызов веб-сервиса в C # с использованием SSL - '(401) Unauthorized' - PullRequest
2 голосов
/ 28 апреля 2009

Я вызываю метод веб-службы из-за прокси-сервера, используя следующий код:

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, я получаю ожидаемый ответ в строке 'response'. Однако - если я изменю URL-адрес на HTTPS , я получу (401) несанкционированный ответ.

Если я вставлю URL в свой браузер, он будет работать нормально, используя HTTP или HTTPS .

Я добавил код для обработки проверки SSL-сертификата, создав делегат System.Net.ServicePointManager.ServerCertificateValidationCallback, но код никогда не заходит так далеко. Запрос отклоняется до того, как он подтвердит сертификат, или так кажется.

Любая помощь очень ценится ...

Ответы [ 2 ]

2 голосов
/ 28 апреля 2009

Вам нужны учетные данные для перехода к URL-адресу SSL?
Если это так, вам нужно установить учетные данные веб-службы.

Вы пытались добавить веб-ссылку в Visual Studio, используя URL-адрес SSL?
Если вы не можете добавить веб-ссылку через Visual Studio, код также не будет работать.

Можете ли вы убедиться, что последнее, что вы установили, это прокси (например, измените URL перед тем, как установить прокси)?
Существует небольшая вероятность того, что прокси-сервер может быть потерян, это должна быть последняя попытка

0 голосов
/ 28 апреля 2009

Вот пример использования сертификата клиента (который, я уверен, вам не нужен), но может предоставить некоторую информацию и использовать учетные данные для веб-службы.

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-сертификат действителен - я полагаю, вы увидите это, когда вы нажмете его через браузер, но это может вызвать проблему при попытке доступа к нему программно.

...