ASP.Net使用Https(證書)協議連接WebService
最近使用ASP.Net連接WebService,不過走的協議是Https的,我一般用的使用都是普通的http協議。所以剛開始有點不值從何下手,不過通過查閱資料,這條路是走通了,下面簡單的記錄一下使用方法。
這是網上的教程:
http://www.cnblogs.com/denylau/archive/2010/07/23/1783530.html
WebService入門教程。
http://www.cnblogs.com/sufei/archive/2010/03/14/https.html
HTTPS ASP.Net訪問WebService
有的朋友並不想直接添加Web引用,想要構建一個類然后供給整個程序使用。
首先要生成一個代理類,但是在生成代理類的時候遇到了問題,沒有證書一直提示無法生成代理類。
通過WSDL我們可以發現,生成代理類有多種方式,第一種也是常用的寫入一個WebService的連接,不過還可以通過文件生成代理類。通過訪問wsdl的連接將源文件保存下來,另存為wsdl后綴名的文件。
使用命令參數轉到D:/web 目錄下
現在代理類已經生成了,我們就可以使用了。
關於介紹WSDL的帖子還是用很多的,下面是其中一篇
http://www.cnblogs.com/xiaobaidhg/archive/2007/04/11/707956.html
因為使用使用的證書所以在程序中使用過程中還會提示
"基礎連接已經關閉: 未能為 SSL/TLS 安全通道建立信任關系"證書驗證失敗
http://www.cnblogs.com/sufei/archive/2010/03/23/1692811.html
在代理的構造方法中回調
public AxisServerExImplService(string ipAddr, string port)
{
this.Url = "https://" + ipAddr + ":" + port + "/OTPAuthenSystem/axis/services/asService?wsdl";
System.Net.ServicePointManager.ServerCertificateValidationCallback = ValidateServerCertificate;
}
private bool ValidateServerCertificate(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors)
{
return true;
}
至此:我們就可以調用Https協議下的WebService了。
總結一下:
1、 首先要使用WebService有兩種方式第一直接引用,第二,寫一個代理類。代理類一定要通過WSDL生成,HTTPS協議下生成代理類的時候會提示證書不受信任。通過網頁打開wsdl的地址,另存為一個后綴名為wsdl的文件。
2、 引用該類之后還會提示基礎連接已經關閉: 未能為 SSL/TLS 安全通道建立信任關系”證書驗證失敗
在該代理類的構造方法中采用回調private static bool RemoteCertificateValidate(object sender, X509Certificate cert, X509Chain chain, SslPolicyErrors error){
// trust any certificate!!!
System.Console.WriteLine("Warning, trust any certificate");
//為了通過證書驗證,總是返回true
return true;
}
引用命名空間。
using System.Net;
using System.Net.Security;
using System.Security.Authentication;
using System.Security.Cryptography.X509Certificates;
解決完這兩個問題之后,其他的問題就迎刃而解了。