一般在项目中,制作的都是基于SOAP协议的webservices,其描述语言是WSDL。但是有时候在项目中,需要保证webservices的安全,需要对其进行进行验证,那么我们就要实现SoapHeader,具体的实现方式如下:

首先就是自定义一个类,继承自System.Web.Services.Protocols.SoapHeader ,然后在这个类中,通过暴露的公共属性和方法来进行校验。

其次就是在webservices主体方法中,添加对SoapHeader的验证的支持

最后直接在用户页面进行验证,调用方法即可。

首先,定义一个sSoapHeader类,暴露出其提供的公共验证字段,并提供验证方法:

  1.  
  2. using System;
  3. using System.Collections.Generic;
  4. using System.Linq;
  5. using System.Web;
  6.  
  7. namespace webServiceDemo
  8. {
  9.     public class sSoapHeader:System.Web.Services.Protocols.SoapHeader
  10.     {
  11.         private string _UserId = string.Empty;
  12.         private string _UserPwd = string.Empty;
  13.  
  14.         public sSoapHeader() { }
  15.  
  16.         public string UserId
  17.         {
  18.             get
  19.             {
  20.                 return _UserId;
  21.             }
  22.             set
  23.             {
  24.                 _UserId = value;
  25.             }
  26.         }
  27.  
  28.         public string UserPwd
  29.         {
  30.             get
  31.             {
  32.                 return _UserPwd;
  33.             }
  34.             set
  35.             {
  36.                 _UserPwd = value;
  37.             }
  38.         }
  39.  
  40.         public void Initial(string username, string password)
  41.         {
  42.             UserId = username;
  43.             UserPwd = password;
  44.         }
  45.  
  46.         public bool IsValid(string uid, string pwd, out string msg)
  47.         {
  48.             msg = "";
  49.             if (uid == "admin" && pwd == "admin888")
  50.             {
  51.                 return true;
  52.             }
  53.             else
  54.             {
  55.                 msg = "对不起,你无法调用";
  56.                 return false;
  57.             }
  58.         }
  59.         public bool IsValid(out string msg)
  60.         {
  61.             return IsValid(_UserId, _UserPwd, out msg);
  62.         }
  63.  
  64.     }
  65. }

其次就是在webservice主体中,添加对此验证方法的支持

  1.  
  2. using System;
  3. using System.Collections.Generic;
  4. using System.Linq;
  5. using System.Web;
  6. using System.Web.Services;
  7. using System.Web.Services.Protocols;
  8.  
  9. namespace webServiceDemo
  10. {
  11.     /// <summary>
  12.     /// Service1 的摘要说明
  13.     /// </summary>
  14.     [WebService(Namespace = "http://tempuri.org/")]
  15.     [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
  16.     [System.ComponentModel.ToolboxItem(false)]
  17.     // 若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消对下行的注释。
  18.     // [System.Web.Script.Services.ScriptService]
  19.     public class Service1 : System.Web.Services.WebService
  20.     {
  21.         public sSoapHeader s = new sSoapHeader();
  22.         [SoapHeader("s")]   //这里就是添加验证方法的标志
  23.         [WebMethod]
  24.         public string HelloWorld(int a,int b)
  25.         {
  26.             string msg = "";
  27.             if (!s.IsValid(out msg))
  28.             {
  29.                 return msg;
  30.             }
  31.             return (+ b).ToString();
  32.         }
  33.  
  34.        
  35.     }
  36. }

在上图中,我已经标志的很清楚了[SoapHeader("s")] 就是添加验证方法的标志。

最后就是在用户页面中进行调用,引用完毕后,需要对soapheader暴露的公共属性方法进行赋值判断,最后调用即可。只要验证正确,便可以正常调用,否则则提示没有权限:

  1.  
  2. using System;
  3. using System.Collections.Generic;
  4. using System.Linq;
  5. using System.Web;
  6. using System.Web.UI;
  7. using System.Web.UI.WebControls;
  8.  
  9. namespace WEB
  10. {
  11.     public partial class _Default : System.Web.UI.Page
  12.     {
  13.         protected void Page_Load(object sender, EventArgs e)
  14.         {
  15.             localhost.Service1 s = new WEB.localhost.Service1();
  16.             localhost.sSoapHeader header = new WEB.localhost.sSoapHeader();
  17.             header.UserId = "admin";
  18.             header.UserPwd = "admin888";
  19.             s.sSoapHeaderValue = header;
  20.             Response.Write(s.HelloWorld(2,1));
  21.         }
  22.     }
  23. }

WebService调用权限验证 SoapHeader的更多相关文章

  1. webservice 的权限验证

    1. http://blog.csdn.net/jaune161/article/details/25602655 2. http://wcp88888888.iteye.com/blog/13993 ...

  2. webservice 第一节 .net SoapHeader验证

    在工作中经常用到webservice,在.net 开发中经常用到webservice,在java开发经常用到cxf. 今天闲置没事就介绍下 .net webservice中常用到 soapheader ...

  3. WebService 简单安全验证

    原文:WebService 简单安全验证 最近新接了一个需要调用第三方WebService的项目,看到这个第三方WebService被调用的时候,需要授权用户名和密码,于是自己也想对WebServic ...

  4. WebService 之 身份验证

    在项目开发,我们经常会使用WebService,但在使用WebService时我们经常会考虑到了WebService是安全问题,很容易想到通过一组用户名与密码来防止非法用户的调用 . 一.Networ ...

  5. android loginDemo +WebService用户登录验证

        android loginDemo +WebService用户登录验证 本文是基于android4.0下的loginActivity Demo和android下的Webservice实现的.l ...

  6. WebService 用户名密码验证

    原文:WebService 用户名密码验证 在项目开发的过程中,WebService是经常要用的,当调用WebService方法时,需要经过服务的验证才可以调用,一般就是用户名/密码验证,还有一个就是 ...

  7. ABP(现代ASP.NET样板开发框架)系列之18、ABP应用层——权限验证

    点这里进入ABP系列文章总目录 ABP(现代ASP.NET样板开发框架)系列之18.ABP应用层——权限验证 ABP是“ASP.NET Boilerplate Project (ASP.NET样板项目 ...

  8. struts2学习笔记--拦截器(Interceptor)和登录权限验证Demo

    理解 Interceptor拦截器类似于我们学过的过滤器,是可以在action执行前后执行的代码.是我们做web开发是经常使用的技术,比如权限控制,日志.我们也可以把多个interceptor连在一起 ...

  9. Web用户的身份验证及WebApi权限验证流程的设计和实现

    5. WebApi 服务端代码示例 5.1 控制器基类ApiControllerBase [csharp] view plaincopy   /// /// Controller的基类,用于实现适合业 ...

随机推荐

  1. eclipse,android Localization (Internationalization) 安卓本地化(国际化)

    1.创建新的资源文件,名字保持一致.提示"已存在",继续. 2.使用“语言”作为识别器,然后选择相应的语言代码.Tips:其他的适配,如国家.屏幕大小等,也是通过这里的识别器实现适 ...

  2. CodeForces 429 B B. Working out

    Description Summer is coming! It's time for Iahub and Iahubina to work out, as they both want to loo ...

  3. JavaScript(四)---- 函数

    函数主要用来封装具体的功能代码. 函数是由这样的方式进行声明的:关键字 function.函数名.一组参数,以及置于括号中的待执行代码. 格式: function 函数名(形参列表){         ...

  4. Windows应用程序要点

    一个完整的Windows应用程序除了WinMain函数外,还包含用于处理用户动作和窗口消息的窗口函数.  Windows应用程序具有的一些特性: 消息驱动机制 图形设备接口(GDI) 基于资源的程序设 ...

  5. 使用Emmet加速Web前端开发

    Emmet插件以前被称作为Zen Coding,是一个文本编辑器的插件,它可以帮助您快速编写HTML和CSS代码,从而加速Web前端开发.早在2009年,Sergey Chikuyonok写过一篇文章 ...

  6. nginx配置文件【转载】

    转自 nginx的配置和使用 - chabale的专栏 - 博客频道 - CSDN.NEThttp://blog.csdn.net/chabale/article/details/8954226 #运 ...

  7. 参数修饰符ref,out ,params的区别

    参数修饰符ref,out ,params的区别 C#中有三个关键字-ref,out ,params,可是这三个之间的区别你都明白了吗? 那么我们就来认识一下参数修饰符ref,out ,params吧, ...

  8. 7、装饰模式(Decorator)

    顾名思义,装饰模式就是给一个对象增加一些新的功能,而且是动态的,要求装饰对象和被装饰对象实现同一个接口,装饰对象持有被装饰对象的实例,关系图如下: Source类是被装饰类,Decorator类是一个 ...

  9. SQL2005附加数据库时遇到的问题:用户组或角色在当前数据库已存在

    一次 附加备份数据库的 mdf 文件     成功后   创建登陆用户    但是  无法映射该用户的 对应数据库  出现 用户组或角色在当前数据库已存在 的问题 首先介绍一下sql server中“ ...

  10. 看unix高级编程时遇到apue.h找不到的问题

    最近学习 Unix 环境高级编程这本书,第一个例子就碰到了问题,下面是解决办法. 一开始看到这本书,刚翻了几页,就觉得对味.按照书中的代码做练习时,编译代码文件提示fatal error: apue. ...