最近公司做到WebService項目,但是要通過Https調用,自己在網上搜了半天,終於實現了服務端的Https,但是一直沒有找到客戶端如何實現,今天終於看到這篇文章,隨手記錄下來。
具體代碼如下:
訪問https的web
public static void ProcessRequest()
{
//類似瀏覽器確認證書合法方法的綁定
ServicePointManager.ServerCertificateValidationCallback = RemoteCertificateValidationCallback;
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://yourUrl");
string param = "test=true";
byte[] bs = Encoding.UTF8.GetBytes(param);
//這2句代碼表示如果要求客戶端證書,將客戶端證書加入request,不需要客戶端證書的https請求則不需要此代碼
X509Certificate cer = new X509Certificate("D:\\tt.cer");
request.ClientCertificates.Add(cer);
request.UserAgent = "test";
request.Method = "post";
using (Stream reqStram = request.GetRequestStream())
{
reqStram.Write(bs, 0, bs.Length);
}
using (HttpWebResponse response = request.GetResponse() as HttpWebResponse)
{
using (StreamReader reader = new StreamReader(response.GetResponseStream()))
{
Console.WriteLine(reader.ReadToEnd());
}
}
Console.ReadKey();
}
//該方法用於驗證服務器證書是否合法,當然可以直接返回true來表示驗證永遠通過。服務器證書具體內容在參數certificate中。可根據個人需求驗證
//該方法在request.GetResponse()時觸發
public static bool RemoteCertificateValidationCallback(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors)
{
if (sslPolicyErrors == SslPolicyErrors.None)
return true;
return false;
}
訪問https的web service基本類同,首先添加對https的web引用。
在代碼中:
public static void WebRefrence()
{
//如果覺得寫一個委托方法麻煩,可以直接使用匿名委托
ServicePointManager.ServerCertificateValidationCallback = delegate(object sender, X509Certificate certificate,
X509Chain chain, SslPolicyErrors errors)
{
if (errors == SslPolicyErrors.None)
return true;
return false;
};
//創建web引用的實例
WebReference.Service ws = new WebReference.Service();
//提供客戶端證書,不要求的可以忽略該步驟
ws.ClientCertificates.Add(new X509Certificate("D:\\tt.cer"));
//執行web service中提供的方法,該例中為將傳入的2個int相加並返回結果
int r = ws.Add(4, 5);
Console.WriteLine(r);
Console.ReadKey();
}
