使用Visual Studio从MVC2控制器生成的代码使用以下代码调用Asmx Web服务。
由于Web服务证书已过期,方法调用将引发异常。如何解决这个问题,以便仍然可以使用Web服务?
使用.NET 3.5和MVC2。
public class AsmxController : Controller
{
public ActionResult Index()
{
var cl = new store2.CommerceSoapClient();
// System.ServiceModel.Security.SecurityNegotiationException was unhandled by user code
//Message=Could not establish trust relationship for the SSL/TLS secure channel with authority 'asmxwebservice.com'.
var vl = cl.GetVendorList( AsmxService.LicenseHeader() ,
new AsmxService.GetVendorListRequest());
return View();
}
}
}
答案 0 :(得分:3)
来自James blog:
因此,为了进行测试,我们需要找到绕过证书的方法 验证。事实证明,你需要提供一个
RemoteCertificateValidationCallback
委托并附上ServicePointManager.ServerCertificateValidationCallback
。什么不是 如果两个线程竞争设置它会发生什么 属性为不同的值,因为它是一个静态属性。反光 表明属性集方法没有做任何花哨的事情,所以 你很容易陷入竞争状态。
所以,他做了以下事情:
// allows for validation of SSL conversations
ServicePointManager.ServerCertificateValidationCallback += new RemoteCertificateValidationCallback(ValidateRemoteCertificate);
// callback used to validate the certificate in an SSL conversation
private static bool ValidateRemoteCertificate(
object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors policyErrors)
{
if (Convert.ToBoolean(ConfigurationManager.AppSettings["IgnoreSslErrors"]))
{
// allow any old dodgy certificate...
return true;
}
else
{
return policyErrors == SslPolicyErrors.None;
}
}