2009-04-28 136 views
2

,我号召Web服务的方法,从后面用下面的代码代理服务器:调用使用SSL C#web服务 - “(401)未经授权”

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委托,但代码从来没有得到这么多。该请求在验证证书之前被拒绝,或者看起来像这样。

任何帮助,非常感谢......

+0

我已经更新了我的答案。 – stevehipwell 2009-04-28 15:17:21

+0

你能否用更多的细节更新问题(例如,当你尝试添加引用时,VS会发生什么)? – stevehipwell 2009-04-28 15:56:23

回答

2

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

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

你能确定你设置的最后一件东西是代理吗(例如,在你设置代理之前更改url)?
有一个小的机会,代理可能会丢失,这应该是尝试

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证书是有效的 - 我猜你会看到这个的时候你打它通过浏览器,但它可能会导致试图以编程方式打一个问题。

相关问题