成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

C#通過httppost方式調用需要證書的webservice-創(chuàng)新互聯(lián)

    前一段時間做花旗銀行的項目,用到花旗的接口是websevice,由于很多原因直接在項目中引用webservice不成功,于是就用了http post方式請求,把請求信息(xml格式)組裝之后發(fā)送到服務器,返回結果。C#通過httppost方式調用
需要證書的webservice

下面就把我當時做的方法分享,希望對大家有用。

創(chuàng)新互聯(lián)建站堅持“要么做到,要么別承諾”的工作理念,服務領域包括:成都網(wǎng)站設計、網(wǎng)站建設、企業(yè)官網(wǎng)、英文網(wǎng)站、手機端網(wǎng)站、網(wǎng)站推廣等服務,滿足客戶于互聯(lián)網(wǎng)時代的茄子河網(wǎng)站設計、移動媒體設計的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡建設合作伙伴!

1,首先在webconfig中配置需要的信息

注:RewardUrl為url地址中公用的部分,因為后面調用不同的接口,地址是不一樣的,所以就抽出來單獨定義了,CommonUrl為IP+端口號,因為這個地址有可能更換所以也單獨定義了。
<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,寫公共的方法,這個方法我子啊項目中多個地方要用到,看似很多余的,可以整合到下面的方法中,但是在我的這個項目中需要這樣會比較方便,所以我沒有整合,大家可以根據(jù)自己的需要進行整合。

        /// <summary>   /// 獲取結果(這個方法主要是獲取PostUrl 然后調用下面的方法)
/// </summary>   /// <param name="xml"></param>   /// <param name="interfaceName">需要調用的對方接口方法名</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;

//設定驗證回調(總是同意)
                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)]加的時候一直出錯,加上了這個就OK了。//是否和請求一起發(fā)送 myRequest.UseDefaultCredentials = true; myRequest.ContentLength= data.Length; myRequest.ClientCertificates.Add(cert);//把證書添加進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(); } }
//回調方法 public static bool CheckValidationResult(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors errors) {// 總是接受 return true; }

5,方法完畢,這時候只要把你的xml報文傳過去,和你要調用的接口名稱傳過去,調用第三步的方法,例如:

GetResCode(xml,“Login”),這樣就返回了信息,我做的項目返回的是xml格式的信息,解析xml就可以得到你想要的結果了。

總結完畢,有總結不對的地方請幫忙指出,也希望對您的學習工作有用。我的郵件:shixudong3@yeah.net

網(wǎng)站欄目:C#通過httppost方式調用需要證書的webservice-創(chuàng)新互聯(lián)
新聞來源:http://jinyejixie.com/article26/cspjjg.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供響應式網(wǎng)站、企業(yè)網(wǎng)站制作域名注冊、定制網(wǎng)站、網(wǎng)站營銷、商城網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站托管運營
彰武县| 香河县| 桃园县| 兴城市| 海安县| 长乐市| 翼城县| 柘荣县| 磐石市| 女性| 苏尼特右旗| 丹寨县| 观塘区| 永靖县| 丹江口市| 中方县| 长治县| 禹州市| 河津市| 眉山市| 凌海市| 中山市| 台湾省| 公主岭市| 板桥市| 景宁| 灵璧县| 登封市| 筠连县| 康乐县| 沂南县| 政和县| 湘潭市| 涡阳县| 玉林市| 京山县| 花莲县| 射洪县| 锦屏县| 民权县| 扬中市|