下面就把我當(dāng)時(shí)做的方法分享,希望對大家有用。
創(chuàng)新互聯(lián)建站堅(jiān)持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:成都網(wǎng)站設(shè)計(jì)、網(wǎng)站建設(shè)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時(shí)代的茄子河網(wǎng)站設(shè)計(jì)、移動媒體設(shè)計(jì)的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!1,首先在webconfig中配置需要的信息
注:RewardUrl為url地址中公用的部分,因?yàn)楹竺嬲{(diào)用不同的接口,地址是不一樣的,所以就抽出來單獨(dú)定義了,CommonUrl為IP+端口號,因?yàn)檫@個(gè)地址有可能更換所以也單獨(dú)定義了。
<appSettings> <addkey="CerPath" value="E:\avantouch.pfx" /> <addkey="CommonUrl" value="https://192.168.1.1:15121"/> <addkey="RewardUrl" value="/SvcImpl/cards/reward/"/></appSettings>
2,定義全局變量,獲取webconfig中的值,以及后面要用到的變量
private static readonly string CommonUrl = ConfigurationManager.AppSettings["CommonUrl"].ToString();
private static readonly string RewardUrl = ConfigurationManager.AppSettings["RewardUrl"].ToString();
private static readonly string CerPath = ConfigurationManager.AppSettings["CerPath"].ToString();
string PostUrl = "";
3,寫公共的方法,這個(gè)方法我子啊項(xiàng)目中多個(gè)地方要用到,看似很多余的,可以整合到下面的方法中,但是在我的這個(gè)項(xiàng)目中需要這樣會比較方便,所以我沒有整合,大家可以根據(jù)自己的需要進(jìn)行整合。
/// <summary> /// 獲取結(jié)果(這個(gè)方法主要是獲取PostUrl 然后調(diào)用下面的方法)
/// </summary> /// <param name="xml"></param> /// <param name="interfaceName">需要調(diào)用的對方接口方法名</param> /// <returns></returns> private string GetResCode(string xml, string interfaceName)
{
PostUrl= RewardUrl + interfaceName;//ip以及端口號之后的地址 byte[] data = Encoding.UTF8.GetBytes(xml.ToString());
string resCode = GetPostRequest(data, PostUrl);//方法在下面 Log.Info("Response:" + resCode);
return resCode;
}
4,寫第三部中的代碼用到的方法,這部比較重要。
/// <summary> /// Post方式請求獲取返回值
/// </summary> /// <param name="data"></param> /// <returns></returns> private string GetPostRequest(byte[] data, string url)
{
try
{
HttpWebRequest myRequest= (HttpWebRequest)WebRequest.Create(CommonUrl + url);//完整的請求地址(ip:端口號/+url)
//X509證書
X509Certificate2 cert= new System.Security.Cryptography.X509Certificates.X509Certificate2(CerPath, "證書密碼", X509KeyStorageFlags.MachineKeySet);
myRequest.ImpersonationLevel= System.Security.Principal.TokenImpersonationLevel.Impersonation;
//設(shè)定驗(yàn)證回調(diào)(總是同意)
ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(CheckValidationResult);
myRequest.Method = "POST";
myRequest.ContentType= "text/xml;charset="utf-8"";
myRequest.Accept= "text/xml";
myRequest.Headers.Add("SOAPAction", url);//我做的過程中,這一步?jīng)]加的時(shí)候一直出錯(cuò),加上了這個(gè)就OK了。//是否和請求一起發(fā)送 myRequest.UseDefaultCredentials = true;
myRequest.ContentLength= data.Length;
myRequest.ClientCertificates.Add(cert);//把證書添加進(jìn)http請求中
Stream newStream= myRequest.GetRequestStream();
// Send the data. newStream.Write(data, 0, data.Length);
newStream.Close();
// Get response var response = (HttpWebResponse)myRequest.GetResponse();
using (var reader = new StreamReader(response.GetResponseStream(), Encoding.GetEncoding("UTF-8")))
{
string result = reader.ReadToEnd();
reader.Close();
response.Close();
return result;
}
}
catch (Exception ex)
{
Log.Info(ex);
return ex.ToString();
}
}
//回調(diào)方法
public static bool CheckValidationResult(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors errors)
{// 總是接受 return true;
}
5,方法完畢,這時(shí)候只要把你的xml報(bào)文傳過去,和你要調(diào)用的接口名稱傳過去,調(diào)用第三步的方法,例如:
GetResCode(xml,“Login”),這樣就返回了信息,我做的項(xiàng)目返回的是xml格式的信息,解析xml就可以得到你想要的結(jié)果了。
總結(jié)完畢,有總結(jié)不對的地方請幫忙指出,也希望對您的學(xué)習(xí)工作有用。我的郵件:shixudong3@yeah.net
網(wǎng)站欄目:C#通過httppost方式調(diào)用需要證書的webservice-創(chuàng)新互聯(lián)
新聞來源:http://www.rwnh.cn/article26/cspjjg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供響應(yīng)式網(wǎng)站、企業(yè)網(wǎng)站制作、域名注冊、定制網(wǎng)站、網(wǎng)站營銷、商城網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容