zoukankan      html  css  js  c++  java
  • WinForm如何调用Web Service【摘】

    NET的WinForm调用Web Service

    在.NET的WinForm中调用Web Service的操作基本上和在ASP.NET中调用Web Service是一样。

    首先在项目上单击鼠标右键,在弹出的快捷菜单中选择“添加Web引用”命令,如图7-11所示。

    添加完引用后,项目中也会创建一个名叫Web References的目录,即引用代理类,如图7-12所示。

    未标题-2.jpg 003.jpg

    图7-11  添加Web引用                 图7-12  Web引用代理类

    代码中使用这个代理类进行调用。

    ProductService.LTPService service = new ProductService.LTPService();

    string price=service.GetProductPrice("001");

    MessageBox.Show(price);

    微软的统一编程模型,真是让我们感觉开发变得简单多了。

    手动发送HTTP请求调用Web Service

    但如果调用Web Service的不是在.NET中,无法直接添加引用怎么办呢?下面就看两个不是直接通过代理类实现对Web Service的调用。

    方式一:Get方式的调用

    private void button1_Click(object sender, EventArgs e)

    {

        string strURL = "http://localhost:12074/Service1.asmx/

                 GetProductPrice?ProductId=";

        strURL += this.textBox1.Text;           

        //创建一个HTTP请求

        HttpWebRequest request = (HttpWebRequest)WebRequest.Create(strURL);

        //request.Method="get";

        HttpWebResponse response = (System.Net.HttpWebResponse)request.GetResponse();

    Stream s = response.GetResponseStream();

    //转化为XML,自己进行处理

        XmlTextReader Reader = new XmlTextReader(s);

        Reader.MoveToContent();

        string strValue = Reader.ReadInnerXml();

        strValue = strValue.Replace("&lt;", "<");

        strValue = strValue.Replace("&gt;", ">");

        MessageBox.Show(strValue);

        Reader.Close();

    }

    方式二:Post方式的调用

    private void button2_Click(object sender, EventArgs e)

    {

        string strURL = "http://localhost:12074/Service1.asmx/GetProductPrice";

        //创建一个HTTP请求

        HttpWebRequest request = (HttpWebRequest)WebRequest.Create(strURL);

        //Post请求方式

        request.Method = "POST";

        //内容类型

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

        //设置参数,并进行URL编码

        string paraUrlCoded = HttpUtility.UrlEncode("ProductId");

        paraUrlCoded += "=" + HttpUtility.UrlEncode(this.textBox1.Text);

        byte[] payload;

        //将URL编码后的字符串转化为字节

        payload = System.Text.Encoding.UTF8.GetBytes(paraUrlCoded);

        //设置请求的ContentLength

        request.ContentLength = payload.Length;

        //发送请求,获得请求流

        Stream writer = request.GetRequestStream();

        //将请求参数写入流

        writer.Write(payload, 0, payload.Length);

        //关闭请求流

        writer.Close();           

        //获得响应流

        HttpWebResponse response = (HttpWebResponse)request.GetResponse();

    Stream s = response.GetResponseStream();

        //转化为XML,自己进行处理

        XmlTextReader Reader = new XmlTextReader(s);

        Reader.MoveToContent();

        string strValue = Reader.ReadInnerXml();

        strValue = strValue.Replace("&lt;", "<");

        strValue = strValue.Replace("&gt;", ">");

        MessageBox.Show(strValue);

        Reader.Close();

    }

    Get请求与Post请求的主要区别在于Post的参数要经过URL编码并在获得请求之前传送,而Get把参数用URL编码后直接附加到请求的URL后面。

    URL编码是一种字符编码格式,它确保传递的参数由一致的文本组成(如将空格编码为“%20”)。

    由于Web Service返回的是标准的XML文档,所以,基本的原理都是通过WebRequest请求后,自己对返回的XML数据进行处理,得到自己想要的信息。同时,这种方式还有一个好处是可以动态调用不同的WebService接口,比较灵活。

  • 相关阅读:
    Javaweb 第4 天xml 课程
    Javaweb 第2天 JavaScript课程
    Javaweb 第1天 HTML和CSS课程
    第27天反射(解剖)技术
    Ip 讲解
    第26 天网络编程
    第25天多线程、网络编程
    【剑指offer】连续子数组的最大和,C++实现
    [剑指offer]数组中最小的K个数,C++实现
    【剑指offer】数组中出现次数超过数组长度一半的数字,C++实现
  • 原文地址:https://www.cnblogs.com/flyinthesky/p/1575354.html
Copyright © 2011-2022 走看看