加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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

发布时间:2020-12-17 00:39:01 所属栏目:安全 来源:网络整理
导读:WebService是基于SOAP协议进行网络通讯的,但本文只介绍了一个WebService简单的使用例子,没有详细介绍关于SOAP协议的知识,有兴趣的朋友可以网站搜索下, 这方面的资料是非常多。 下面说说WebService的例子吧。 1、新建一个WebService项目,在项目下新建一

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,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调用的例子完毕。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读