一个简单的WebService实现例子,SOAP安全验证

来源:互联网 发布:veket linux下载 编辑:程序博客网 时间:2024/05/16 18:56

WebService是基于SOAP协议进行网络通讯的,但本文只介绍了一个WebService简单的使用例子,没有详细介绍关于SOAP协议的知识,有兴趣的朋友可以网站搜索下,

这方面的资料是非常多。

下面说说WebService的例子吧。


1、新建一个WebService项目,在项目下新建一个SoapHeader.cs类,这个类是用来做WebSerivce安全性验证,此类必须继承.net类库的SoapHeader类。

代码清单:

using System;using System.Web.Services.Protocols;namespace Shuanglu.WebService{    public class MySoapHeader : SoapHeader    {        public MySoapHeader()        {            //            //TODO: 在此处添加构造函数逻辑            //        }        private string _userid = string.Empty;        private string _password = string.Empty;        public string errinfo = "您要找的资源已被删除、已更名或暂时不可用。";        public string UserID        {            get { return _userid; }            set { _userid = value; }        }        public string Password        {            get { return _password; }            set { _password = value; }        }        public bool IsValid()        {            string Msg = string.Empty;            return IsValid(_userid, _password, out Msg);        }        public bool IsValid(out string Msg)        {            return IsValid(_userid, _password, out Msg);        }        public bool IsValid(string nUserID, string nPassword, out string Msg)        {            Msg = "";            try            {                if (nUserID == "19873534socrates" && nPassword == "daling234534")                {                    return true;                }                else                {                    Msg = "对不起你无权调用此WebService,可能的原因如下:1、你的帐号管理员禁用了。2、您的帐号的密码不正确!";                    return false;                }            }            catch (Exception e)            {                Msg = "对不起你无权调用此WebService,可能的原因如下:1、你的帐号管理员禁用了。2、您的帐号的密码不正确!<br/>" + e.Message;                return false;            }        }    }}

上面的代码清单这一行,
if (nUserID == "19873534socrates" && nPassword == "daling234534")

是验证客户端提交过来的用户名、密码。可以自行设定,在客户端调用的时候需和服务器端一致就可以了,


2、在WebService项目里新建一个 Test.asmx文件 ,用于给客户端调用WebService入口,

客户端调用WebService前必须对调用进行校验,看是否有调用的权限,

有权限则允许调用,否则返回空或错误提示信息,这个可以根据个人实际情况进行定义。

在这里仅写一个简单的调用例子。

代码清单:

using System;using System.ComponentModel;using System.Web.Services;using System.Data;using System.Web.Services.Protocols;namespace Shuanglu.WebService{    /// <summary>    /// Article 的摘要说明    /// </summary>    [WebService(Namespace = "http://tempuri.org/")]    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]    [ToolboxItem(false)]    // 若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消对下行的注释。    // [System.Web.Script.Services.ScriptService]    public class Article : System.Web.Services.WebService    {        //定义报头,但不实例化,必须由客户端实例化        public MySoapHeader soapheader;        [SoapHeader("soapheader", Direction = SoapHeaderDirection.InOut)]        [WebMethod(Description = "Web服务调用测试", EnableSession = true)]        public string MyTest()        {            if (soapheader.IsValid())            {                string s = "Web服务调用测试成功";                return s;            }            return "";        }     }}

注意上面代码清单中的红色字部分,在这两个地方要一致 

public MySoapHeader soapheader;         

[SoapHeader("soapheader", Direction = SoapHeaderDirection.InOut)]


如果不一致,将会报错误。

到此,一个简单的WebService项目就建好了。

下面我们将要把它部署起来。

在IIS里新建一个站点,XP系统的也可以新建一个虚拟目录。把新建的站点或是目录的根目录指向到刚才创建的WebService项目,

然后使用浏览器浏览刚才创建WebService站点或虚拟目录 Test.asmx文件,看看是不是已经正确的部署到IIS上面了。

成功部署WebSerivce到IIS,接下来我们就可以做一个简单的调用了。



3、新建一个WebApplication, 或是WebSite项目,

添加WebService引用,在项目名称上右击菜单即弹出下面的菜单,把刚才部署到IIS上面的WebServiceURL填写到下面的URL栏,点前往。

右侧有一个Web 引用名,这个名称可以自定义,在引用WebService里会用到的。填写好之后,点击

”添加引用“ 按钮,完成对WebService的引用。


在项目里新建一个web form 文件,test.aspx,

test.aspx.cs文件代码清单:

using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Web.UI;using System.Web.UI.WebControls;namespace Mike.Web{    public partial class test1 : System.Web.UI.Page    {        protected void Page_Load(object sender, EventArgs e)        {            
            Mike.Web.Article.MySoapHeader soap = new Mike.Web.Article.MySoapHeader();            soap.UserID = "19873534socrates";             soap.Password = "daling234534";  //此处的用户名,密码需要各服务器上一致 Mike.Web.Article.Article  bll = new Mike.Web.Article.Article();            bll.MySoapHeaderValue = soap;            string result = bll.MyTest();            Response.Write(result);        }    }}


上面这一段代码是调用WebService,调用之前,首先要在SOAP报文头部设置用户名,密码,需要各服务器上面一致,用于调用前校验是否有调用权限。

接着是实例化一个WebService调用的实例,把设置好的SOAP报文头赋值给实例的属性。

然后接着下来的一行代码是调用 WebService上面的方法:

tring result = bll.MyTest();

最后输出WebService返回的结果。

在WebService, WebApplication, WebSite部署在本地电脑上(或是说在同一台电脑上,是可以从Web端单步调试到WebService里面去的)。

到此,整个WebService调用的例子完毕。












原创粉丝点击