Web服务初探:用Demo学Web服务系列(3)——用C/S程序调用Web服务

        从Visual Studio.Net2003开始,微软的.Net开发平台就吸引了很多的编程的专业人员和爱好者。当微软的Visual Studio.Net2005一面世,世界为之再次一惊,真的可以说是“取其精华,去其糟粕”了。当然新的成长也会带来新的问题,但是总体来说是在前进着的。好了,废话也不多说了,来用这个非常方便的.Net平台来开发这个Demo吧!
        我们在《Web服务初探:用Demo学Web服务系列(2)——编写一简单的Web服务》已经开发出了一个简单的WebService,名为MyServiceClass。在这个随笔中,我们就来讲解如何调用这个外部的WebService(有的地方也把外部的WebService叫做远端WebService)。
        下面是我的开发环境配置:
操作系统:WindowsXP(已安装了IIS)
开发工具:Microsoft Visual Studio.Net2005
开发所用语言:Visual C#

        这里我们假设您已经刚刚建立好了一个Windows应用程序工程,其名称为“WindowsPro”,并将工程中默认的窗体名称“Form1”改为“Login.cs”,那么Login窗体的其他属性如下(需要更改的属性):
BackColor = 0, 192, 192;(Name) = Login;FormBorderStyle = FixedSingle;MaximizeBox = False;MinimizeBox = False;StartPosition = CenterScreen,然后在窗体上放置三个Label、两个TextBox和两个Button,分别设置其属性后,如下图:
下面就是一个关键部分了,右击工程名称选择“添加Web引用”,在弹出的窗口中选择“本地计算机的Web服务”后,会列出所有在您计算机上能找的WebService,选择并点击上一篇随笔中定义的MyServiceClass,在新出的窗口中将Web引用名更改为“MyServ”,点击“添加引用”。这样在工程的Web References文件夹中会添加一个MyServiceClass的代理,名为“MyServ”。
        添加完WebService的代理后,我们就可以在程序中使用了,下面看看上面窗体的代码如下:
 1using System;
 2using System.Collections.Generic;
 3using System.ComponentModel;
 4using System.Data;
 5using System.Drawing;
 6using System.Text;
 7using System.Windows.Forms;
 8
 9namespace WindowsPro
10{
11    public partial class Login : Form
12    {
13        public Login()
14        {
15            InitializeComponent();
16        }

17
18        private void Btn_Login_Click(object sender, EventArgs e)
19        {
20            MyServ.MyServiceClass MyWebServ = new MyServ.MyServiceClass();
21            bool LoginOK = MyWebServ.Login(this.tB_UserName.Text, this.tB_PassWord.Text);
22            if (LoginOK)
23            {
24                MessageBox.Show("用户名和密码正确!");
25            }

26            else
27            {
28                MessageBox.Show("用户名和密码错误!");
29            }

30        }

31
32        private void Btn_Close_Click(object sender, EventArgs e)
33        {
34            this.Close();
35        }

36    }

37}
其中的第18行“MyServ.MyServiceClass MyWebServ = new MyServ.MyServiceClass();”是实列化MyServiceClass代理类,以便在下面的代码中调用MyServiceClass中的方法,在第21行“bool LoginOK = MyWebServ.Login(this.tB_UserName.Text, this.tB_PassWord.Text);”中调用了MyServiceClass中的Login方法,MyWebServ生成Soap消息后发送到服务器端验证所输入的用户名和密码是否正确,并返回结果。大家可以运行一下这个程序,输入正确的用户名“Micky”和密码“micky0”测试一下,再输入一个其他的用户名和密码测试一下。
         这里简要解释一下调用机制:Login方法中的两个参数(从this.tB_UserName.Text和this.tB_PassWord.Text中获得)通过MyServiceClass的代理类MyServ生成一个Soap消息,将这个Soap消息通过Http协议发送给服务器端的MyServiceClass,而服务器端的MyServiceClass解析Soap消息后调用相应的方法执行,并将方法返回的值再由MyServiceClass生成一个Soap消息通过Http协议发送给调用的客户端,当调用的客户端MyServiceClass的代理类MyServ接受到这个消息,解析出里面返回的值,赋值给变量bool LoginOK。
        由上面说的可以看出我们必须知道每个调用的方法所要传入的参数类型和方法所要返回值的类型。
        今天我们通过一个Windows应用程序的用户登录窗口实现了一个简单的C/S程序调用WebService。下一篇随笔我们还是要用到MyServiceClass这个服务,并将修改其中的Login方法,再来讲解使用此应用程序如何再次调用修改后的MyServiceClass服务。

注:在《Web服务初探:用Demo学Web服务系列(2)——编写一简单的Web服务》的评论中, TheOLD(远古) 曾提出要求增加讲解Web Services的原理,在此我对他表示感谢。经过我的考虑,我会在《系列》后面的一个或多个专门的随笔中讲解XML的基本知识、Soap消息的结构以及Web Services和Soap消息的关联。因为《系列》的主旨是初探,并是用的Demo,也就是应用为主,所以在这里我没有过多的去说出我所理解的一些不是很全的原理。并且有些知识我可能也不是很清楚,还希望能和大家多多交流。
原文地址:https://www.cnblogs.com/lijigang/p/545049.html