当前位置: 首页 > 编程日记 > 正文

添加Soap头来增加Web Service的安全性

myService.asmx.cs

添加类:MyHeader 从 System.Web.Services.Protocols.SoapHeader继承

完整的代码如下


using System;

using System.Collections;

using System.ComponentModel;

using System.Data;

using System.Diagnostics;

using System.Web;

using System.Web.Services;

//对soap Head引用添加的命名空间

using System.Web.Services.Protocols; 

 

namespace study

{

     
/// <summary>

     
/// myService 的摘要说明。

     
/// </summary>


     
//[WebService(Namespace="http://MyServer/MyWebServices/")]

     
public class myService : System.Web.Services.WebService

     
{

         
/// <summary>

         
/// Soap头实例

         
/// </summary>


         
public MyHeader myHeader=new MyHeader();

 

         
public myService()

         
{

              
//CODEGEN: 该调用是 ASP.NET Web 服务设计器所必需的

 

              InitializeComponent();

 

         }


 

         
组件设计器生成的代码 组件设计器生成的代码

         

          
//Web 服务设计器所必需的

         
private IContainer components = null;

                   

         
/// <summary>

         
/// 设计器支持所需的方法 - 不要使用代码编辑器修改

         
/// 此方法的内容。

         
/// </summary>


         
private void InitializeComponent()

         
{

         }


 

         
/// <summary>

         
/// 清理所有正在使用的资源。

         
/// </summary>


         
protected override void Dispose( bool disposing )

         
{

              
if(disposing && components != null)

              
{

                   components.Dispose();

              }


              
base.Dispose(disposing);         

         }


         

         
#endregion


 

         
// WEB 服务示例

         
// HelloWorld() 示例服务返回字符串 Hello World

         
// 若要生成,请取消注释下列行,然后保存并生成项目

         
// 若要测试此 Web 服务,请按 F5 键

 

         [WebMethod]

         
public string HelloWorld()

         
{

              
return "Hello World";

         }


         [SoapHeader(
"myHeader")]

         [WebMethod(Description
="ddddddd",EnableSession=true)]

         
public string HelloWorld2(string contents)

         
{

              
string msg = "";

              
//验证是否有权访问

              
if(!myHeader.IsValid(out  msg))

                   
return msg;

              
return "Hello World:"+contents;

         }


     }


     
public class MyHeader :  System.Web.Services.Protocols.SoapHeader 

     
{

         
private string _UserID=string.Empty;

         
private string _PassWord=string.Empty;

 

         
/// <summary>

         
/// 构造函数

         
/// </summary>


         
public MyHeader()

         
{

 

         }


         
/// <summary>

         
/// 构造函数

         
/// </summary>

         
/// <param name="nUserID">用户ID</param>

         
/// <param name="nPassWord">加密后的密码</param>


         
public MyHeader(string nUserID,string nPassWord)

         
{

              Initial(nUserID,nPassWord);

         }


         

         
属性 属性

 

         
/// <summary>

         
/// 用户名

         
/// </summary>


         
public string UserID

         
{

              
get{return _UserID;}

              
set{_UserID=value;}

         }


         
/// <summary>

         
/// 加密后的密码

         
/// </summary>


         
public string PassWord

         
{

              
get{return _PassWord;}

              
set{_PassWord=value;}

         }


 

         
#endregion


         
方法 方法

 

         
/// <summary>

         
/// 初始化

         
/// </summary>

         
/// <param name="nUserID">用户ID</param>

         
/// <param name="nPassWord">加密后的密码</param>


         
public void Initial(string nUserID,string nPassWord)

         
{

              UserID
=nUserID;

              PassWord
=nPassWord;

         }


         
/// <summary>

         
/// 用户名密码是否正确

         
/// </summary>

         
/// <param name="nUserID">用户ID</param>

         
/// <param name="nPassWord">加密后的密码</param>

         
/// <param name="nMsg">返回的错误信息</param>

         
/// <returns>用户名密码是否正确</returns>


         
public bool IsValid(string nUserID,string nPassWord,out string nMsg)

         
{

              nMsg
="";

              
try

              
{

                   
//判断用户名密码是否正确 

                   
if(nUserID == "admin" && nPassWord == "admin"){

                       
return true;

                   }


                   
else

                   
{

                       nMsg
="对不起,你无权调用此Web服务,可能有如下原因:"n 1.您的帐号被管理员禁用。"n 2.您的帐号密码不正确";

                       
return false;

                   }


              }


              
catch

              
{

                   nMsg
="对不起,你无权调用此Web服务,可能有如下原因:"n 1.您的帐号被管理员禁用。"n 2.您的帐号密码不正确";

                   
return false;

              }


         }


         
/// <summary>

         
/// 用户名密码是否正确

         
/// </summary>

         
/// <returns>用户名密码是否正确</returns>


         
public bool IsValid(out string nMsg)

         
{

              
return IsValid(_UserID,_PassWord,out nMsg);

         }


 

         
#endregion 

}


 

}



通过soap调用的代码如下:


              // 在此处放置用户代码以初始化页面

              
//创建myService对象

              MyWebServer.myService service 
= new study.MyWebServer.myService();

              
//创建soap头对象

              MyWebServer.MyHeader header 
= new study.MyWebServer.MyHeader();

              
//设置soap头变量

              header.PassWord 
= "admin";

              header.UserID 
= "admin";

              service.MyHeaderValue 
= header;

              
//调用web 方法

            
this.Label1.Text = service.HelloWorld2("dob");

 

相关文章:

BAT七年经验,却抵不过外企面试的两道算法题?

整理| 琥珀 出品| AI科技大本营又遇年底跳槽季&#xff0c;如果你曾在 BAT 等互联网大厂有过较为丰富的工作经验&#xff0c;想要换份工作&#xff0c;面试时会主要考虑哪些因素&#xff1f;面试外企&#xff0c;却被两道算法题难住&#xff1f;近日&#xff0c;一位网友在脉脉…

#Ruby# Introspect (1)

Introspect&#xff0c;内省&#xff0c;是指从程序自身出发&#xff0c;审视程序各方面的能力。这个过程又称为Reflection&#xff0c;反射。 孔子曰&#xff0c;吾日三省吾身。于人于程序&#xff0c;内省都是非常重要的。 1. Looking at objects ObjectSpace.each_object([…

java.lang.IllegalMonitorStateException 异常出现原因

java.lang.IllegalMonitorStateException 违法的监控状态异常。当某个线程试图等待一个自己并不拥有的对象&#xff08;O&#xff09;的监控器或者通知其他线程等待该对象&#xff08;O&#xff09;的监控器时&#xff0c;抛出该异常。 例子&#xff1a; //计算线程 //获取计算…

Tomcat init 脚本并添加服务自启动

很多用源码编译安装和一些用tar包直接解压缩的java程序都没有init脚本&#xff0c;不能像httpd或者nginx这种服务直接使用service httpd start&#xff0c;也不能使用/etc/init.d/httpd start 来启动。对于这种情况&#xff0c;我们可以自己写一个init脚本&#xff0c;并将命令…

算法 | 动画+解析,轻松理解「Trie树」

Trie这个名字取自“retrieval”&#xff0c;检索&#xff0c;因为Trie可以只用一个前缀便可以在一部字典中找到想要的单词。 虽然发音与「Tree」一致&#xff0c;但为了将这种 字典树 与 普通二叉树 以示区别&#xff0c;程序员小吴一般读「Trie」尾部会重读一声&#xff0c;可…

#Ruby# Introspect (2)

3. Looking at Classes superclass > get the parent of any particular class ancestors > get both superclasses and mixin modules 在Ruby1.9中&#xff0c;任何未指定的class都继承自Object&#xff0c;而Object继承自BasicObject&#xff0c;BasicObject无supercla…

国内ITSM解决方案-UNIPER

UNIPER是行业领先的ITSM解决方案提供商。参与了ITIL V3的开发与实践&#xff0c;是中国ITSM行业推动者之一&#xff0c;方案包括服务台&#xff0c;事件和问题管理&#xff0c;变更和配置管理&#xff0c;服务等级管理&#xff0c;IT运营绩效考评&#xff0c;主动计划任务管理&…

清华首批7门标杆课程,到底有多牛?

整理 | Jane出品 | AI科技大本营近日&#xff0c;清华大学公布首批七门标杆课程。什么是标杆课程&#xff1f;据清华大学官方介绍&#xff0c;此项评选是 2018 年 4 月启动的&#xff0c;由各院系推荐、教务处形式审查。本次最终确定了 26 门课程参加评审&#xff0c;并于 2018…

我的Rails笔记(1)

《Agile Web Development With Rails》Notebook. 环境&#xff1a; Rails 3.1.0 Gem 1.8.10 Ruby ruby 1.9.2p180 1. rails depot 2. rails generate scaffold Product title:string description:text image_url:string price:decimal 报错&#xff1a;/1.9.1/gems/execj…

资源 | 斯坦福最新NLP课程上线,选择PyTorch放弃TensorFlow

整理 | Jane 出品 | AI科技大本营 今天在斯坦福大学 2019 年冬季 CS224n 最新课程已经正式更新到官网啦。新一年&#xff0c;大家可以开始跟着名校课程学起来啦~今年一个非常大的变化就是所有内容实现都使用 PyTorch&#xff0c;不再使用 TensorFlow。内容设计方面新增了 Tra…

推荐本人微博及浅谈发博原则

本人新浪微博&#xff1a;http://weibo.com/jinbinforever 花了一些力气&#xff0c;将关注数降到100以下&#xff0c;以后原则上关注数不会增加了。发现这样做的好处非常明显&#xff0c;减少了很多无谓的信息干扰。less is more&#xff0c;做减法能让自己收获更多&#xff0…

Lintcode108 Palindrome Partitioning || solution 题解

【题目描述】Given a strings, cutsinto some substrings such that every substring is a palindrome.Return the minimum cuts needed for a palindrome partitioning ofs.给定一个字符串s&#xff0c;将s分割成一些子串&#xff0c;使每个子串都是回文。返回s符合要求的的最…

发现价值(1)-无限的网络资源

Google发布Google wave的新闻甚嚣尘上.匆匆忙忙间,我也第一时间浏览了这个未来的杀手级应用.不得不赞叹Google强大创新力的同时,又不得不在自己的 to-read-list 上多了一个标签. 仅仅是read是不能产生任何价值的,对于技术我们需要dive into it.这点我明白,但是还是常常陷入浩如…

Ruby的Singleton method

Ruby中&#xff0c;特定于某一对象的方法被称为Singleton method。 例如&#xff1a; a "string"def a.runputs "#{self} run" endstr.run # >#string run run方法是特定于a这个对象的&#xff0c;故run方法是a的Singleton方法。 实现上&#xff0c;当…

AD ---- 活动目录的日常管理操作

管理信任关系:什么是信任关系:信任关系是用于确保一个域的用户可以访问和使用另一个域中资源的安全机制 根据传递性分,信任关系可分为可传递信任关系和不可传递信任关系两种 根据域之间关系分,Windows信任关系则可分为四种 信任关系是如何工作的 创建信任关系 删除信任关系 …

07.GitHub实战系列~7.Git之VS2013团队开发(如果不想了解git命令直接学这篇即可)...

GitHub实战系列汇总&#xff1a;http://www.cnblogs.com/dunitian/p/5038719.html —————————————————————————————————————————————————————— 直接实战~&#xff08;如果你之前安装了git其他版本都可以卸载了~这个就够了…

公开课报名 | 深入浅出理解A3C强化学习

强化学习是一种比较传统的人工智能手段&#xff0c;在近年来随着深度学习的发展&#xff0c;强化学习和深度学习逐渐结合在了一起。这种结合使得很多原来无法想象的工作有了可能&#xff0c;最令我们瞩目的莫过于AlphaGo战胜李世石&#xff0c;以及OpenAI团队的机器人可以在团战…

Hibernate是啥?

1&#xff1a;Hibernate和JDBC、ODBC的作用是一样的、用来访问、操作数据库的。它的优势在哪&#xff1f;没用过、我也不知道。。。不过貌似【数据持久化】是个关键词。[下边是百科里的一段话&#xff1a;对象上数据的修改&#xff0c;Hibernate框架会把这种修改同步到数据库中…

#Java夜未眠# 读书笔记

微博上的蔡学镛是个有趣的家伙&#xff0c;有条微博这样写道&#xff1a; “记得十多年前我的第一本书出版时&#xff0c;我隔几天就到书店微服出巡&#xff0c;看看状况。当看到有人拿起我的书时&#xff0c;我内心的口白&#xff1a;"英明英明&#xff0c;你可真识货呀…

asp.net 控制页面css样式

asp.net 控制页面css样式fontDiv.Style["display"] "none";fontDiv.Style["display"] "";转载于:https://www.cnblogs.com/qiantuwuliang/archive/2009/06/02/1494709.html

腾讯AI Lab负责人张潼离职,张正友或接替其位

来源 | 网易智能 刚刚&#xff0c;据知情人士透露&#xff0c;腾讯人工智能实验室 AI Lab 主任张潼已经从腾讯离职&#xff0c;未来将重返学术界。 关于该消息&#xff0c;腾讯方面目前尚无回应。 网易智能独家获悉&#xff0c;AI Lab接手人是机器人实验室的张正友。 有消息…

频频霸榜的Python,竟遭开发者嫌弃!

在刚刚过去的 2018 年里&#xff0c;要说最热门的科技领域是哪一个&#xff1f;毋庸置疑的是&#xff0c;人工智能必排在前列&#xff1b;而要论编程语言界&#xff0c;最流行的编程语言是谁&#xff1f;那非 Python 莫属。2018 年 8 月&#xff0c;根据一年一度的 IEEE Spectr…

#每天一种设计模式# 观察者模式

系统常常会出现这种情况&#xff1a; 每一个部分需要知道整体的状态。比如Excel中&#xff0c;当你修改了一个单元格的值&#xff0c;可能横列的sum需要改变&#xff0c;纵列的sum需要改变&#xff0c;根据这个单元格做的图需要改变&#xff0c;是否被修改的按钮需要激活... 如…

el-input怎么绑定回车事件

在 Vue 2.0 中&#xff0c;为自定义组件绑定原生事件必须使用 .native 修饰符&#xff1a;<el-input v-model"queryForm.skuName" placeholder"请输入商品名称" keyup.enter.native"skuNameSearch"></el-input> 转载于:https://www.…

DOS命令大全(经典收藏)

http://wuhua.javaeye.com/blog/32374 net use \\ip\ipc$ " " /user:" " 建立IPC空链接 net use \\ip\ipc$ "密码" /user:"用户名" 建立IPC非空链接 net use h: \\ip\c$ "密码" /user:"用户名" 直接登陆后映射对…

Ruby Metaprogramming

Ruby使用者对attr_accessor一定不会陌生。 class Aattr_accessor :num end 等效于&#xff1a; class Adef numnumenddef (value)num valueend end 在类的定义中&#xff0c;attr_accessor定义了num的读写方法&#xff0c;只用了一行代码就生成了两个实例方法&#xff0c;很…

四川大学线下编程比赛第一题:数字填充

四川大学线下编程比赛第一题&#xff1a;数字填充公布公司&#xff1a;有 效 期&#xff1a;CSDN 2014-09-27至2015-09-26 难 度 等 级&#xff1a;答 题 时 长&#xff1a;编程语言要求&#xff1a;120分钟C C Java C#题目详情peter喜欢玩数字游戏。但数独这种游戏对他来说太简…

Google AI骗过了Google,工程师竟无计可施?

作者 | 若名 出品 | AI科技大本营 如果你通过 Google 搜索购买演唱会门票或者注册论坛账号&#xff0c;系统会提示你必须点击几个图框、音频或者移动鼠标等操作来确认是人类在操作验证而不是机器人。 其背后的验证机制就是 CAPTCHA&#xff08;验证码&#xff09;&#xff0c;…

用高中数学理解AI “深度学习”的基本原理

本文作者尚俊霖&#xff0c;全职产品经理&#xff0c;业余自学机器学习。最近开始写硬核科普&#xff0c;欢迎关注公众号欠拟合&#xff08;ID:Underfit&#xff09;。Google 研发了十年自动驾驶后&#xff0c;终于在本月上线了自动驾驶出租车服务。感谢“深度学习”技术&#…

Linux I2C工具查看配置I2C设备【转】

转自&#xff1a;http://blog.chinaunix.net/uid-26895763-id-3478882.html 在處理音訊相關的問題時&#xff0c;我通常會找個方法來讀寫codec中register的值。幸好linux上也有這樣的工具 – i2c tools。先到lm-sensors下載soure code&#xff0c;然後cross compile成arm的執行…