2

我正在使用以下代码从代理服务器后面调用 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 时效果很好,我在“响应”字符串中得到了我期望的响应。但是 - 如果我将 URL 更改为HTTPS ,那么我会收到(401) Unauthorized响应。

如果我将 URL 放入我的浏览器,它可以使用 HTTP 或 HTTPS 正常工作

我添加了代码来通过创建一个System.Net.ServicePointManager.ServerCertificateValidationCallback委托来处理 SSL 证书验证,但代码从来没有走到这一步。该请求在验证证书之前被拒绝,或者看起来如此。

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

4

2 回答 2

2

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

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

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

于 2009-04-28T14:52:57.463 回答
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 证书是否有效 - 我猜您在通过浏览器点击它时会看到这一点,但它可能会导致尝试以编程方式点击它时出现问题。

于 2009-04-28T15:24:03.973 回答