WinForm如何调用Web Service

参考地址

1        安装JDK=> (1,下载JDK,安装,一般目录为C:\Program Files\Java中;2,通过Dos命令测试JDK是或不是安装=>java –version命令查看安装JDK版本;三.变更环境变量(一,设置变量名:JAVA_HOME.安装变量值为D:jdk6.0;新建PATH,设置变量值为%JAVA_HOME%bin; class_path,变量值为.;C:\Program Files\Java\jdk1.6.0_43\lib\dt.jar;);四,通过javac命令展现出来;)

贰      
Java基本语法=>  
1,标识符。(不可能死关键字;可以包罗字母,数字,下划线_或$;第二个必须是字母,_或$;区分大下写,不分明字母长度);驼峰命名法:前字母大写,不可能以数字开首;帕斯卡命名法:前字母小写,后单词大写;数据类型(基本类型:整型(byte,short,int,long)
;
浮点型(float,double);字符型:(char);布尔型:(bolean:用于JDK决定(true,false));引用类型:(类:(class);接口(lnterface);数组);变量:用来储存数据。(给变量起名,提出变量中存储的数码的门类。);

      
程序流程序控制制=>布尔运算符(&&且;||或;|或(贰个二个对比);!非;异或^);挑选运算符:if;if/else;switch(case,default); 
循环语句:while;for(;;);do/while;     
跳转语句:break:能够用于别的循环控制结构,从而使循环霎时截至。  
Continue: 终止贰回巡回;

四        
类,对象和包=>    类中有总体性(public class Employee{public String
name;});   实例化对象,new
在运算符中创设对象并回到;向类中添加成员变量,添加格局;  
访问对象的性质和方法:Employee e=new Employee();  e.name=”张三”;  
this引用:当前=被引述的;

5        对象的一举一动 =>  
方法调用栈;   方法签名:public static void main(String args
[])  访问修饰符(public
private,protected或暗中认可访问修饰符);可选修饰符(static;final;
abstract;native);   再次回到值(类型);   形式参数列表;public float
divide (int x,float f);   方式参数和实在参数
(格局参数列表用于注明传递到艺术中的数据的类型。传递给格局参数的多寡变成事实上参数);
五.5 按值调用
当实际参数字传送递给方式参数时,实际参数的多少被复制给情势参数。在编制程序中,在章程调用之间复制数据的经过;          
伍.6 
方式重载(优点:便于开发简化操作,制止麻烦)当一个类有两到八个同名但是有两样参数列表的措施时,正是方式重载;             
 构造器
:(在创造对象上被对象初始化。)一,构造方法的称谓必供给跟类名1致;二,构造器无重回值(重临值类型);三,暗中同意情形下,类中有3个无参数构造方法(如:public
students(){});4, 当写出带参构造器时,系统不会再未有无参构造器;5,
构造器调用构造器用this;

6        数组  =>  6.1 

数组归纳:int [] sums(  int [] sums= new int[5]{一,二,3,4,5}; );
陆.三 数老董度:数组名.length  ;   6.陆  数组复制 (System.arraycopy(
新数组,0(从0初阶复制), 被复制的数组,4,新数组.length));  

7         继承  =>  public
class 子 extends extends 父{};   使用“is a”关系判断后续( “is a”
是三个简约而强劲的条条框框,用于判断父类和子类的再而三关系是或不是科学,当使用持续时,必须
能够说子类“is a(是三个)” 父类);      7.伍   
 单继承和多继承(继承的单根性,传递性):JAVA类只可以有四个父类;  
7.六  全数类的根类Object(超类)  
(JAVA语言API中含有了三个名叫Object的万分类,
它是百分之百java类的层次中的根类。);Object类在java.lang
包中,是各样java类的父类,要命是一向的父类,要么就是直接父类。    7.7方法重写
(1.子类的法子的重临值的项目,方法名和款式参数列表,必训和父类中的是相同的。 
贰,访问修饰符必训非常的大于父类中的访问修饰符。  3,
子类中重写的特别不能抛出比父类愈多的十三分。) 7.七.一 
equals()(判断三个字符串是不是相同);   柒.八 
super关键字(super(属性,);必须是第二条语句)super.方法或属性 ;   7.9 
final关键字(使用final不可能被接续;final方法不能够被重写(无子类));

8         类的高档概念=>  捌.一
 访问修饰符(公开访问级别:使用public关键字修饰的分子对外祖父开,即公开成员能够被此外其余的靶子访问)。
受保养访问级别:(使用protected关键字修饰,可以被同三个包中的类所访问,还足以被类的子类所访问,不管敬仲类是在哪个包当中)。  
暗中认可访问级别 :(未有访问修饰符。能够被同叁个包中的类所访问);  
私有访问级别:(使用private关键字修饰符,它是种种访问修饰符中级别最低,私有成员唯有类本人能够访问,不对伯公开);      
八.二 
封装(封装是使类中的成员变量都以private,并提供public方法访问这一个成员变量的技艺。) 使用 getter(读) setter(写);  8.3 清楚静态成员(关键字static);静态方法无法访问实例成员; 8.4 静态非静态在构造方法以前运营(运维顺序:静态=>父类=> 非静态=>子类); 8.6 内部类( 1.静态内部类
2,成员内部类 3,局地内部类  4,匿名内部类);

       
多态和浮泛=> 9.1多态 (静态多态(如方法重载):程序在编写翻译时,系统就能控制调用哪个方法;动态多态: 在运作中系统才能动态鲜明方法所指的对象,所以也化为编写翻译时多态);          9.1.1 多态的技术基础 
(1,向上转型技术; 2,instanceof关键字用于判断运维时的对象的实在类型;3,动态绑定技术);【1,编写父类编写子类;2,子类中重写父类方法;3,用父类数据类型引出子类对象之后,自动寻找-】多态就是同多个艺术名的多样不一样完结;  9.2 抽象abstract(抽象)abstract
class A{ public abstract void F();}

10
 接口=>  Java接口的风味归咎:

一,
Java接口中的成员变量默许皆以public,static,final类型的(都可粗略),必须被出示初步化,即接口中的成员变量为常量(大写,单词之间用”_”分隔)

2,
Java接口中的方法私下认可都是public,abstract类型的(都可粗略),未有方法体,不能够被实例化 

接口关键字:父类:public interface A{}子类:
Java接口必须经过类来贯彻它的抽象方法

public class A implements B{…}

 

                              

明日看了李天平关于WinForm调用Web
瑟维斯的代码,小编要好模仿做贰个代码基本都以复制粘贴的,结果不佳使。郁闷的是,又碰着那贰个该死的GET调用Web
Service,笔者想一定又是Web.config要求配备,结果WinForm没有这一个布局文件,奇怪,为何人家的就好使,笔者写的就不佳使呢。

上网搜吧,唉,找个八个多小时,基本都是和自家同一的代码,互相转发。根本没人提代码好不佳使,也没人提正确的用法。就在自个儿要放任的时候,终于意识原本是在 Web
瑟维斯的Web.config里安排的(下边滴2步),真是欲哭无泪啊,我们可要注意啊。

好了,把进度详细说下呢。

①、建立项目WebService和WinForm项目,那里起名称为WinFormInvokeWeb瑟维斯,如图所示,

 

2、Service一.asmx代码为:(那有个别其实和上篇的代码是同样的)

using System;

using System.Collections.Generic;

using System.Linq;

using System.Web;

using System.Web.Services;

using System.Data;

 

namespace WebService1

{

    /// <summary>

    /// 瑟维斯一 的摘要表达

    /// </summary>

    [WebService(Namespace = “http://tempuri.org/")\]

    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]

    [System.ComponentModel.ToolboxItem(false)]

    // 若要允许行使 ASP.NET
AJAX 从剧本中调用此 Web 服务,请废除对下行的笺注。

    [System.Web.Script.Services.ScriptService]

    public class Service1 : System.Web.Services.WebService

    {

        //无参方法

        [WebMethod]

        public string HelloWorld()

        {

            return “Hello World”;

        }

 

        //有参方法一

        [WebMethod]

        public int Add(int a, int b)

        {

            return a + b;

        }

 

        //有参方法贰

        [WebMethod]

        public int Sum(int x)

        {

            int sum = 0;

            for (int i = 0; i <= x; i++)

            {

                sum += i;

            }

            return sum;

        }

 

        // 重临2个复合类型

        [WebMethod]

        public  Student GetStudentByStuNo(string stuNo)

        {

            if(stuNo==”001″)

                return new Student { StuNo = “001”, StuName = “张三” };

            if(stuNo==”002″)

                return new Student { StuNo = “002”, StuName = “李四” };

            return null;

        }

 

        //再次回到再次来到泛型集合的

        [WebMethod]

        public List<Student> GetList()

        {

            List<Student> list = new List<Student>();

 

            list.Add(new Student() { StuNo = “001”, StuName = “张三” });

            list.Add(new Student() { StuNo = “002”, StuName = “李四” });

            list.Add(new Student() { StuNo = “003”, StuName = “王五” });

            return list;

        }

 

        //返回DataSet

        [WebMethod]

        public  DataSet GetDataSet()

        {

            DataSet ds = new DataSet();

            DataTable dt = new DataTable();

            dt.Columns.Add(“StuNo”, Type.GetType(“System.String”));

            dt.Columns.Add(“StuName”, Type.GetType(“System.String”));

            DataRow dr = dt.NewRow();

            dr[“StuNo”] = “001”; dr[“StuName”] = “张三”;

            dt.Rows.Add(dr);

 

            dr = dt.NewRow();

            dr[“StuNo”] = “002”; dr[“StuName”] = “李四”;

            dt.Rows.Add(dr);

 

            ds.Tables.Add(dt);

            return ds;

        }

    }

    public class Student

    {

        public string StuNo { get; set; }

        public string StuName { get; set; }

    }

}

三、在WebService的web.config文件的system.web节下边加上以下配置。即使不添加在启入手工业发送HTTP请求调用WebService(利用GET格局)时,总是出现“远程服务器再次回到错误:
(500) 内部服务器错误。”正是其一该死的荒谬,让自家浪费2个多小时

    <webServices>

        <protocols>

            <add name=”HttpPost” />

            <add name=”HttpGet” />

        </protocols>

</webServices>

四、在WinForm应用程序里添加Web引用,有人会意识选取WinForm项目里只好添加服务引用,作者那儿也是这么觉得后来,后来发以往做异步的调用的时候有些措施其实点不出去,所以这边说下什么添加Web引用,接纳体系WinFormInvokeWebService右键->添加服务引用,弹出以下对话框

 

 (一)选用高档

 

(二)选用添加web引用

 

(三)选取“此化解方案中的Web服务”

 

(4)选择Service1

 

(伍)在web引用名里输入1个劳动名称,那里运用暗中认可的名目localhost,点添加引用

5、添加3个Windows窗体,

(一)Form一拖放的控件为:

 

Form1的代码为:

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

 

namespace WinFormInvokeWebService

{

    public partial class Form1 : Form

    {

        public Form1()

        {

            InitializeComponent();

        }

 

        private void button1_Click(object sender, EventArgs e)

        {

            localhost.Service1 service = new localhost.Service1();

            localhost.Student s = service.GetStudentByStuNo(“002”);

            MessageBox.Show(“学号:” + s.StuNo + “,姓名:” + s.StuName);

        }

 

        private void button2_Click(object sender, EventArgs e)

        {

            new Form2().Show();

        }

 

        private void button3_Click(object sender, EventArgs e)

        {

            new Form3().Show();

        }

    }

}

 

(二)Form二拖放的控件为:

 

Form二的代码为:

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

 

//导入此命名空间

using System.Net;

using System.Xml;

using System.IO;

using System.Web;   //先添加System.Web引用再导入此命名空间

 

namespace WinFormInvokeWebService

{

    public partial class Form2 : Form

    {

        public Form2()

        {

            InitializeComponent();

        }

 

        //手工发送HTTP请求调用WebService-GET情势

        private void button1_Click(object sender, EventArgs e)

        {

            //http://localhost:3152注意你的地址可能和我的不一样,运行WebService看下你的端口改下

            string strURL
= “http://localhost:3152/Service1.asmx/GetStudentByStuNo?stuNo=“;

            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();

 

            XmlTextReader Reader = new XmlTextReader(s);

            Reader.MoveToContent();

            string strValue = Reader.ReadInnerXml();

            strValue = strValue.Replace(“<“, “<“);

            strValue = strValue.Replace(“>”, “>”);

            MessageBox.Show(strValue);

            Reader.Close();

        }

 

        //手工业发送HTTP请求调用WebService-POST方式

        private void button2_Click(object sender, EventArgs e)

        {

            //http://localhost:3152注意你的地址可能和我的不一样,运行WebService看下你的端口改下

            string strURL
= “http://localhost:3152/Service1.asmx/GetStudentByStuNo“;

 

            //成立3个HTTP请求

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

 

            //Post请求格局

            request.Method = “POST”;

 

            //内容类型

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

 

            //参数经过U揽胜L编码

            string paraUrlCoded = HttpUtility.UrlEncode(“stuNo”);

 

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

 

            byte[] payload;

            //将U中华VL编码后的字符串转化为字节

            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();

 

            XmlTextReader Reader = new XmlTextReader(s);

            Reader.MoveToContent();

            string strValue = Reader.ReadInnerXml();

            strValue = strValue.Replace(“<“, “<“);

            strValue = strValue.Replace(“>”, “>”);

            MessageBox.Show(strValue);

            Reader.Close();

        }

    }

}

 

 (三)Form3拖放的控件为:

 

 

 

 

 

 

Form三的代码为:

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

 

namespace WinFormInvokeWebService

{

    public partial class Form3 : Form

    {

        public Form3()

        {

            InitializeComponent();

        }

 

        //利用Backgroundworker对象

        private void button1_Click(object sender, EventArgs e)

        {

            BackgroundWorker backgroundworker = new BackgroundWorker();

 

            // 注册具体异步处理的不2秘诀

            backgroundworker.DoWork
+= new DoWorkEventHandler(back_DoWork);

 

            // 注册调用达成后的回调方法

            backgroundworker.RunWorkerCompleted
+= newRunWorkerCompletedEventHandler(back_RunWorkerCompleted);

 

            // 那里起初异步调用

            backgroundworker.RunWorkerAsync();

 

            //调用劳动的同时客户端处理并不鸣金收兵

            ChangeProcessBar();

        }

 

        //实现事件

        void back_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)

        {

            if (e.Error != null)

                throw e.Error;

            progressBar一.Value =
progressBar壹.马克西姆um;                              //调用完了了,把客户端进度条填充满

            localhost.Student s =
e.Result aslocalhost.Student;                    //获取处理结果

            MessageBox.Show(“学号:” + s.StuNo + “,姓名:” +
s.StuName);            //彰显从服务器获取的结果值

        }

        //调用艺术

        void back_DoWork(object sender, DoWorkEventArgs e)

        {

            // Web Service代理类

            localhost.Service1 service = new localhost.Service1();

 

            // 调用Web方法GetClass一,结果赋值给DoWork伊夫ntArgs的Result对象

            e.Result = service.GetStudentByStuNo(“002”);

        }

 

        /// <summary>

        /// 界面包车型地铁进程条展现

        /// </summary>

        void ChangeProcessBar()

        {

            for (int i = 0; i < 10; i++)

            {

                progressBar1.Value = i;

                System.Threading.Thread.Sleep(500);

            }

        }

 

        //调用WebMethod的Async方法

        private void button2_Click(object sender, EventArgs e)

        {

            // Web Service代理类

            localhost.Service1 service = new localhost.Service1();

 

            //那里开端异步调用

            //service.GetProductPriceAsync(“001”);

            service.GetStudentByStuNoAsync(“002”);

 

            // 注册调用完毕后的回调方法

            service.GetStudentByStuNoCompleted
+= newlocalhost.GetStudentByStuNoCompletedEventHandler(GetStudentByStuNoCompleted);

 

            //调用并且客户端处理不停歇

            ChangeProcessBar();

        }

        //已毕事件

        void GetStudentByStuNoCompleted(object sender,
localhost.GetStudentByStuNoCompletedEventArgse)

        {

            if (e.Error != null)

                throw e.Error;

            progressBar一.Value =
progressBar一.马克西姆um;                              //调用完了了,把客户端过程条填充满

            localhost.Student s =
e.Result aslocalhost.Student;                    //获取处理结果

            MessageBox.Show(“学号:” + s.StuNo + “,姓名:” +
s.StuName);            //呈现从服务器获取的结果值

        }

 

 

    }

}

 运营结果:

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图