码迷,mamicode.com
首页 > Web开发 > 详细

访问https加密的WebServices方法

时间:2015-03-13 12:23:43      阅读:215      评论:0      收藏:0      [点我收藏+]

标签:

访问https加密的WebServices方法

 

获取该webservices的wsdl描述文档

可以通过安装证书的浏览器访问获得,也可以通过以下代码将获得wsdl文档存入指定的磁盘下。

 

static void Main(string[] args)

        {

            string msg;

            string str = GetWsdl("https://localhost/MyWebServices.asmx?WSDL", null, "Get", out msg);

            using (FileStream fs=new FileStream ("d:/1.wsdl",FileMode.CreateNew))

            {

                using (StreamWriter sw=new StreamWriter (fs))

                {

                    sw.Write(str);

                }

            }

        }

 

        public static string GetWsdl(string url, string arges, string method, out string msg)

        {

            string getData = string.Empty;

            try

            {

                ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(ValidateServerCertificate);

                HttpWebRequest httpRequest = null;

                if (method.ToUpper() == "GET")

                {

                    if (!string.IsNullOrEmpty(arges))

                    {

                        url = url + "?" + arges;

                    }

                    httpRequest = (HttpWebRequest)HttpWebRequest.Create(url);

                    X509Certificate cerCaiShang = new X509Certificate("Cer\\ssl.pfx", "1234");

                    httpRequest.ClientCertificates.Add(cerCaiShang);

                }

                if (method.ToUpper() == "POST")

                {

                    httpRequest = (HttpWebRequest)HttpWebRequest.Create(url);

                    X509Certificate cerCaiShang = new X509Certificate("Cer\\ssl.pfx", "1234");

                    httpRequest.ClientCertificates.Add(cerCaiShang);

                    byte[] bs = Encoding.UTF8.GetBytes(arges);

                    httpRequest.Method = "POST";

                    httpRequest.ContentType = "application/x-www-form-urlencoded";

                    if (!string.IsNullOrEmpty(arges))

                    {

                        httpRequest.ContentLength = bs.Length;

                        using (Stream reqStream = httpRequest.GetRequestStream())

                        {

                            reqStream.Write(bs, 0, bs.Length);

                            reqStream.Close();

                        }

                    }

                }

 

                // Stream stream = null;

                using (HttpWebResponse response = (HttpWebResponse)httpRequest.GetResponse())

                {

                    //  stream= response.GetResponseStream();

                    using (StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8))

                    {

                        getData = reader.ReadToEnd().ToString();

                    }

                }

                msg = null;

                return getData;

            }

            catch (Exception ex)

            {

                msg = ex.ToString();

                return null;

            }

        }

 

 

        public static bool ValidateServerCertificate(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors)

        {

            return true;

        }

 

二 将获得的wsdl文件通过wsdl.exe手动生产代理类

wsdl /l:cs /n:tt /out:d:\2.cs d:\1.wsdl

参数解释 /l 代表开发语言后缀名

         /n 生成的代码文件的命名空间

         /out 生产文件的路径 以及wsdl文档所在的路径

 

三将生产的代理类引入到项目中,并在构造函数中加入以下代码

ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(ValidateServerCertificate);

            X509Certificate cerCaiShang = new X509Certificate("Cer\\ssl.pfx", "1234");//证书所在的路径及密码

            this.ClientCertificates.Add(cerCaiShang);

 

在代理类中加入以下代码

  private bool ValidateServerCertificate(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors)

        {

            return true;

        }

 

现在就可以通过代理类访问加密后的webservices了

访问https加密的WebServices方法

标签:

原文地址:http://www.cnblogs.com/aniy129/p/4334573.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!