A period of time to do Citibank's project, the use of Citi's interface is Websevice, for many reasons directly in the project reference webservice unsuccessful, so the HTTP POST request, the request information (XML format) is assembled and sent to the server, return results.
I would like to share the way I did at the time, hope to be useful to everyone.
1, first configure the required information in the Webconfig
Note: The Rewardurl is the common part of the URL address, because the address is different after the call to various interfaces, so it is drawn out separately defined, Commonurl for the ip+ port number, because this address can be replaced so also defined separately.
<appSettings> <AddKey= "Cerpath"value= "E:\\avantouch.pfx" /> <AddKey= "Commonurl"value= "https://192.168.1.1:15121"/> <AddKey= "Rewardurl"value= "/svcimpl/cards/reward/"/> </appSettings>
2, define global variables, get the values in Webconfig, and the variables to be used later
Private Static ReadOnly stringCommonurl = configurationmanager.appsettings["Commonurl"]. ToString (); Private Static ReadOnly stringRewardurl = configurationmanager.appsettings["Rewardurl"]. ToString (); Private Static ReadOnly stringCerpath = configurationmanager.appsettings["Cerpath"]. ToString (); stringPostURL ="";
3, write public methods, this method of my son Ah project in a number of places to use, seemingly very redundant, can be integrated into the following methods, but in my project need this will be more convenient, so I do not integrate, we can according to their needs to integrate.
/// <summary> ///Get the results (this method is primarily to get posturl and then call the following method)/// </summary> /// <param name= "xml" ></param> /// <param name= "InterfaceName" >the caller interface method name that needs to be called</param> /// <returns></returns> Private stringGetrescode (stringXmlstringInterfaceName) {PostURL= Rewardurl + InterfaceName;//IP and address after port number byte[] data =Encoding.UTF8.GetBytes (XML. ToString ()); stringRescode = getpostrequest (data, posturl);//method is belowLog.info ("Response:"+Rescode); returnRescode; }
4, write the third part of the code used in the method, this is more important.
/// <summary> ///Post method request get return value/// </summary> /// <param name= "Data" ></param> /// <returns></returns> Private stringGetpostrequest (byte[] Data,stringURL) { Try {HttpWebRequest myrequest= (HttpWebRequest) webrequest.create (Commonurl +URL);//Full Request Address (IP: port number/+url)
X509 Certificate
New the certificate Password " , X509keystorageflags.machinekeyset); = System.Security.Principal.TokenImpersonationLevel.Impersonation; // set a validation callback (always agree )
Servicepointmanager.servercertificatevalidationcallback =NewRemotecertificatevalidationcallback (CheckValidationResult);
Myrequest.method ="POST"; Myrequest.contenttype="text/xml;charset=\ "Utf-8\""; Myrequest.accept="Text/xml"; MYREQUEST.HEADERS.ADD ("SOAPAction", URL);//I do the process, this step did not add time has been wrong, plus this is OK. //whether to send with the requestMyrequest.usedefaultcredentials =true; Myrequest.contentlength=data. Length; MYREQUEST.CLIENTCERTIFICATES.ADD (cert);//Add the certificate into the HTTP request Stream Newstream=Myrequest.getrequeststream (); //Send the data.Newstream.write (data,0, data. Length); Newstream.close (); //Get Response varResponse =(HttpWebResponse) myrequest.getresponse (); using(varReader =NewStreamReader (response. GetResponseStream (), Encoding.GetEncoding ("UTF-8"))) { stringresult =Reader. ReadToEnd (); Reader. Close (); Response. Close (); returnresult; } } Catch(Exception ex) {log.info (ex); returnEx. ToString (); } }
Callback Method Public Static BOOLCheckValidationResult (Objectsender, X509Certificate certificate, X509chain chain, sslpolicyerrors errors) { //Always accept return true; }
5, the method is finished, just send your XML to the past, and the name of the interface you want to invoke pass through, call the third step method, for example:
Getrescode (XML, "Login"), so return the information, I do the project returns XML format information, parse the XML can get the results you want.
conclusion, there is a summary of the wrong place please help to point out, but also hope that your study work useful. My e-mail: [Email protected]