前一段时间做花旗银行的项目,用到花旗的接口是websevice,由于很多原因直接在项目中引用webservice不成功,于是就用了http post方式请求,把请求信息(xml格式)组装之后发送到服务器,返回结果。

下面就把我当时做的方法分享,希望对大家有用。

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

注:RewardUrl为url地址中公用的部分,因为后面调用不同的接口,地址是不一样的,所以就抽出来单独定义了,CommonUrl为IP+端口号,因为这个地址有可能更换所以也单独定义了。
<appSettings>
<add key="CerPath" value="E:\\avantouch.pfx" />
<add key="CommonUrl" value="https://192.168.1.1:15121"/>
<add key="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,写公共的方法,这个方法我子啊项目中多个地方要用到,看似很多余的,可以整合到下面的方法中,但是在我的这个项目中需要这样会比较方便,所以我没有整合,大家可以根据自己的需要进行整合。

        /// <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);//我做的过程中,这一步没加的时候一直出错,加上了这个就OK了。//是否和请求一起发送
myRequest.UseDefaultCredentials = true; myRequest.ContentLength = data.Length;
myRequest.ClientCertificates.Add(cert);//把证书添加进http请求中
Stream newStream = myRequest.GetRequestStream(); // Send the data.
newStream.Write(data, , 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

C#通过http post方式调用需要证书的webservice的更多相关文章

  1. asp.net 调用带证书的webservice解决办法

    最近在朋友弄一个调整省政府政务工作流的程序.. 需要把当前的信息推送到政务网上,采用的是带证书的https webservice.. 下面说一下实现过程 第一步,引用webservice地址,删除we ...

  2. 微信公众平台HTTPS方式调用配置免费https服务器

    微信公众平台数据传输安全,提高业务安全性,公众平台将不再支持HTTP方式调用.避免影响正常使用中含有HTTP方式调用的服务,请开发者尽快调整,将现有通过HTTP方式调用的切换成HTTPS调用,平台将于 ...

  3. .Net Core 发送https请求/.net core 调用数字证书 使用X509Certificate2

    .Net Core 发送https请求 .net core 调用数字证书 使用X509Certificate2 .NET下面的 .netfromwork使用和asp.net core下使用方式不一样 ...

  4. Atitit 动态调用webservice与客户端代理方式调用

    Atitit 动态调用webservice与客户端代理方式调用 方式1: 使用call.invoke  直接调用WSDL,缺点:麻烦,不推荐--特别是JAVA调用.NET的WS时,会有不少的问题需要解 ...

  5. YbSoftwareFactory 代码生成插件【二十五】:Razor视图中以全局方式调用后台方法输出页面代码的三种方法

    上一篇介绍了 MVC中实现动态自定义路由 的实现,本篇将介绍Razor视图中以全局方式调用后台方法输出页面代码的三种方法. 框架最新的升级实现了一个页面部件功能,其实就是通过后台方法查询数据库内容,把 ...

  6. HttpClient Get/Post方式调用Http接口

    本节摘要:本节主要分别介绍如何用get方式.post方式向http接口发送数据. preparation 1. 项目环境如下: myeclipse6.5 .tomcat5.0.system:xp.JD ...

  7. C#以post方式调用struts rest-plugin service的问题

    struts2: 玩转 rest-plugin一文中,学习了用struts2开发restful service的方法,发现用c#以post方式调用时各种报错,但java.ajax,包括firefox ...

  8. 反射-优化及程序集等(用委托的方式调用需要反射调用的方法(或者属性、字段),而不去使用Invoke方法)

    反射-优化及程序集等(用委托的方式调用需要反射调用的方法(或者属性.字段),而不去使用Invoke方法)   创建Delegate (1).Delegate.CreateDelegate(Type, ...

  9. Matlab与C/C++联合编程之Matlab以MEX方式调用C代码(五)完整过程加示

    如下为本人亲证代码: 一: 编译器的安装与配置(环境不同,显示结果不同) 要使用MATLAB编译器,用户计算机上应用事先安装与MATLAB适配的以下任何一种ANSI C/C++编译器: 5.0.6.0 ...

随机推荐

  1. cas实现单点登录原理

    1.基于Cookie的单点登录的回顾        基于Cookie的单点登录核心原理: 将用户名密码加密之后存于Cookie中,之后访问网站时在过滤器(filter)中校验用户权限,如果没有权限则从 ...

  2. PHP变量、数据类型、字符串、运算符、条件语句、循环语句、数组、函数

    PHP 简介: php :是一门动态交互的计算机语言  静态交互 html  css  js 但凡是动态交互的 都需要服务器. php都是以.php结尾的文件 Html文件里不能写php代码,但是ph ...

  3. 【机器学习实战】第2章 K-近邻算法(k-NearestNeighbor,KNN)

    第2章 k-近邻算法 KNN 概述 k-近邻(kNN, k-NearestNeighbor)算法主要是用来进行分类的. KNN 场景 电影可以按照题材分类,那么如何区分 动作片 和 爱情片 呢? 动作 ...

  4. 读写属性/if判断那点事/数组

    读写属性属性操作注意事项 js中不允许出现"-".所以font-size变成fontSize/margin-top变成marginTop. Op.style.with=" ...

  5. HDU 3001 Travelling (状压DP,3进制)

    题意: 给出n<=10个点,有m条边的无向图.问:可以从任意点出发,至多经过同一个点2次,遍历所有点的最小费用? 思路: 本题就是要卡你的内存,由于至多可经过同一个点2次,所以只能用3进制来表示 ...

  6. Spoj REPEATS 后缀自动机+set

    REPEATS - Repeats 链接:http://www.spoj.com/problems/REPEATS 题意:求S串中某个子串连续循环次数最多的次数. 想法: 从暴力开始,枚举所有串,求出 ...

  7. 为什么我的C4C Service Request没办法Release到ERP?

    问题 UI上发现找不到Release to ERP的按钮: 但是在UI Designer里是能看到这个按钮的.检查其Visible的属性,绑到了一个Calculated Rule上面: 发现其显示在r ...

  8. 使用com.sun.imageio.plugins.png.PNGMetadata读取图片的元数据

    所谓图片元数据,就是除了我们肉眼看到的图片内容外,隐藏在这些内容背后的一些技术数据. 本文介绍如何使用Java代码将一张图片的隐藏信息读取出来. 首先不需要下载任何额外的Java库,用JDK自带的库就 ...

  9. 什么样子的WordPress网站更受搜索引擎欢迎

    网站的导航功能对于搜索引擎而言是非常重要的 网站的导航功能对于帮助用户迅速找到他们想要的内容来说是很重要的.它对帮助搜索引擎理解该网站有哪些重要内容同样非常重要.虽然百度的搜索结果都是指向每一个特定的 ...

  10. Tomcat:使用startup.bat启动tomcat遇到报错

    问题:使用startup.bat启动tomcat的时候报错,按照网页上的办法都试了一遍,但是没有解决问题.命令窗口启动tomcat会一闪而过,然后退出. 解决:1 检查环境变量配置是否有问题: CAT ...