使用SSL在C#中调用webservice - '(401)Unauthorized'

时间:2009-04-28 14:29:16

标签: c# web-services ssl http-status-code-401 unauthorized

我正在使用以下代码从代理服务器后面调用Web服务上的方法:

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'字符串中得到了我期待的响应。 但是 - 如果我将网址更改为 HTTPS ,那么我会收到(401)未经授权的响应。

如果我将网址放入浏览器,则可以使用HTTP或HTTPS

我已经添加了代码来通过创建System.Net.ServicePointManager.ServerCertificateValidationCallback委托来处理SSL证书验证,但代码永远不会这么做。该请求在验证证书之前就被拒绝了。

真的很感激任何帮助...

2 个答案:

答案 0 :(得分:2)

您是否需要凭据才能导航到SSL网址?
如果是这样,您需要设置Web服务凭据。

您是否尝试使用SSL网址在Visual Studio中添加网络参考?
如果您无法通过Visual Studio添加Web引用,则代码也无法正常工作。

您能否确定您设置的最后一件事是代理(例如,在设置代理之前更改网址)?
代理可能丢失的可能性很小,这应该是最后一次尝试

答案 1 :(得分:0)

以下是使用客户端证书(我确定您不需要)的示例,但可能会提供一些见解&使用凭据到Web服务。

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证书是否有效 - 我猜你在浏览器时会看到这个问题,但是这可能会导致尝试以编程方式命中它。