利用SoapHeader验证web service调用的合法性(dwonmoon)

本文主要通过示例介绍利用SoapHeader验证web service调用的合法性,
一建立Web service项目,新建一个APIService.asmx
其后台代码如下

using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Web.Services.Protocols;
namespace Downmoon.API
{
/// <summary>
/// GlobalSetting 的摘要说明
/// </summary>
public class APIService : System.Web.Services.WebService
    {
public APIService()
        {
//SHeader = new SecuritySoapHeader();
        }
public class SecuritySoapHeader : SoapHeader
        {
#region Bak
private string _userName = string.Empty;
private string _pwd = string.Empty;
/**/
/// <summary>
/// 用户名
/// </summary>
public string InvokeUserName
            {
get
                { return _userName; }
set
                { _userName = value; }
            }
/**/
/// <summary>
/// 密码
/// </summary>
public string InvokeUserPwd
            {
get
                { return _pwd; }
set
                { _pwd = value; }
            }
#endregion
        }
#region Members
public SecuritySoapHeader SHeader = new SecuritySoapHeader();
private string _userName = string.Empty;
private string _pwd = string.Empty;
public string InvokeUserName
        {
get
            { return _userName; }
set
            { _userName = value; }
        }
public string InvokeUserPwd
        {
get
            { return _pwd; }
set
            { _pwd = value; }
        }
public static string SecurityUserID
        {
get
            {
try
                {
return System.Configuration.ConfigurationManager.AppSettings["SecurityUserID"].ToString().Trim();
                }
catch
                {
return "欢迎与邀月交流,net技术与软件架构";
                }
            }
        }
public static string SecurityUserPWD
        {
get
            {
try
                {
return System.Configuration.ConfigurationManager.AppSettings["SecurityUserPWD"].ToString().Trim();
                }
catch
                {
return "S2H3I4l5p6q7";
                }
            }
        }
#endregion
#region  Methods
#region CheckHeader
public bool IsLegalInvoked()
        {
return IsLegalInvoked(this.SHeader);
        }
public virtual bool IsLegalInvoked(SecuritySoapHeader header)
        {
bool bl = false;
if (header == null)
            {
//return "您没有设置SoapHeader,不能正常访问此服务!";
return bl;
            }
else if (header.InvokeUserName == null || header.InvokeUserName.Trim().Length == 0 || header.InvokeUserPwd == null || header.InvokeUserPwd.Trim().Length == 0)
            { return bl; }
if (header.InvokeUserName.Trim() != SecurityUserID || header.InvokeUserPwd.Trim() != SecurityUserPWD)
            {
//return "您提供的身份验证信息有误,不能正常访问此服务!";
return bl;
            }
            bl = true;
return bl;
        }
#endregion
#region ERRORHandle
private clsBasePage bp;
public void ErrorHandle(string strMessage)
        {
if (bp == null)
            {
                bp = new clsBasePage();
            }
else
            {
                bp.ErrorStop(strMessage);
return;
            }
        }
#endregion
#endregion
    }
}

二、添加一个PassPort.asmx,继承APIWebService,主要是为了重用SoapHeader,
调用方法如下(红色代码部分):

using System;
using System.Web;
using System.Collections;
using System.Web.Services;
using System.Web.Services.Protocols;
using System.ComponentModel;
namespace Downmoon.API
{
/// <summary>
/// PassPort 的摘要说明 Downmoon Last Modified 
/// </summary>
    [WebService(Namespace = "欢迎与邀月交流,net技术与软件架构.API")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
public class PassPort : APIService
    {
public PassPort()
        {
        }
#region Members
#endregion
#region  Methods
#region 测试安全信息
        [WebMethod(Description = "Test Safe Invoke", EnableSession = true, CacheDuration = 30),SoapHeader("SHeader")]       
        public string HelloWorld()
        {
            if(IsLegalInvoked())
            {
            return "Suceed!";
            }
            else{
                return "Illegal Invoke!";
            }
        }
        #endregion
#endregion
    }
}

三、建立Vs2005测试项目,并添加一个测试类(vs2005会自动生成,呵呵)
修改后代码如下:

// 以下代码由 Microsoft Visual Studio 2005 生成。
// 测试所有者应该检查每个测试的有效性。
using Microsoft.VisualStudio.TestTools.UnitTesting;
using System;
using System.Text;
using System.Collections.Generic;
namespace TestAPI2005
{
/// <summary>
///这是 Downmoon.API.PassPort 的测试类,旨在
///包含所有 Downmoon.API.PassPort 单元测试
///</summary>
    [TestClass()]
public class PassPortTest
    {
private TestContext testContextInstance;
/// <summary>
///获取或设置测试上下文,上下文提供
///有关当前测试运行及其功能的信息。
///</summary>
public TestContext TestContext
        {
get
            {
return testContextInstance;
            }
set
            {
                testContextInstance = value;
            }
        }
#region 附加测试属性
//编写测试时,可使用以下附加属性:
#region InitTest
public static string invokeusername;
public static string invokeuserpwd;
public static string username;
public static string userIP;
public static string ConnKey;
public static string ConnValue;
public static int rowCount;
public static DateTime ldNow;
#endregion
        [ClassInitialize()]
public static void MyClassInitialize(TestContext testContext)
        {
            invokeusername = "欢迎与邀月交流,net技术与软件架构";
            invokeuserpwd = "S2H3I4l5p6q7";
            username = "欢迎与邀月交流,net技术与软件架构";
            userIP = "10.103.33.6";
            ConnKey = "";
            ConnValue = "";
            rowCount = 0;
            ldNow = DateTime.Now;
        }
        [ClassCleanup()]
public static void MyClassCleanup()
        {
            invokeusername = null;
            invokeuserpwd = null;
        }
//使用 TestInitialize 在运行每个测试前先运行代码
//[TestInitialize()]
//public void MyTestInitialize()
//{
//}
//使用 TestCleanup 在运行完每个测试后运行代码
//[TestCleanup()]
//public void MyTestCleanup()
//{
//}
#endregion
#region HelloWorld () 的测试
/// <summary>
///HelloWorld () 的测试
///</summary>
        [TestMethod]
public void HelloWorldTest()
        {
try
            {
                TestAPI.PassPort.PassPort target = new TestAPI.PassPort.PassPort();
                target.SecuritySoapHeaderValue = new TestAPI.PassPort.SecuritySoapHeader();
                target.SecuritySoapHeaderValue.InvokeUserName = invokeusername;
                target.SecuritySoapHeaderValue.InvokeUserPwd = invokeuserpwd;
string str = target.HelloWorld();
                Console.WriteLine(str);//Console.WriteLine("Result:" + str);
                Assert.AreEqual(str, "Suceed!", false);
            }
catch (Exception ex)
            {
                Assert.Fail("单元测试生成错误: "+ex.Message);
Console.WriteLine(ex.Message);
            }
        }
#endregion
    }
}

四、在测试管理器中勾选该测试类
右键“运行选中的测试”,即可看到运行结果:通过!
标准输出 Suceed!
此时如果在浏览器中直接调用该服务,将会出现 “Illegal Invoke!”
OK! 结束
以上代码适用于.net 2.0及Vsts 2005。应该也可以适用于vs2003。

邀月注:本文版权由邀月和博客园共同所有,转载请注明出处。
助人等于自助!   3w@live.cn

转载于:https://www.cnblogs.com/hsapphire/archive/2010/02/06/1664923.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/411157.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql往前一天同一时间_Mysql时间轴数据 获取同一天数据的前三条

创建表数据CREATE TABLE praise_info (id bigint(20) NOT NULL AUTO_INCREMENT COMMENT ID,pic_id varchar(64) DEFAULT NULL COMMENT 图片ID,created_time datetime DEFAULT CURRENT_TIMESTAMP COMMENT 创建时间,PRIMARY KEY (id),KEY pic_id (pic_id) USING BTREE) ENGINEInn…

服务器2003 系统修复,第十一篇 Windows Server 2003系统修复.pdf

第十一章 Windows Server 2003系统修复windows Server 2003提供了各种系统防护与修复措施统防护与修复措施&#xff0c;&#xff0c;主要包括主要包括&#xff1a;&#xff1a;磁盘容错系统磁盘容错系统 ((见见1212章章 ))文件的备份与还原文件的备份与还原 ((见见1313章章 ))高…

fckeditor配置

原文地址http://hi.baidu.com/huqiwen/blog/item/7d36b15113fddd1e377abe7d.html 由于FckEditor for java 2.4相对于2.3而言做了许多改变&#xff0c;这些改变使得我们的Fckeditor配置起来更方便。例如&#xff1a; 基础包名从&#xff1a;com.fredck.FCKeditor 改为 net.fcked…

css中怎么消除a的下划线,如何使用css去掉a标签的下划线?(代码详解)

写html超链接的时候&#xff0c;超链接总是自带下划线&#xff0c;如果不需要下划线&#xff0c;我们需要将其去掉&#xff0c;下面我们就来说一下怎么去掉下划线。我们在使用超链接的时候&#xff0c;下划线总是伴随着出现&#xff0c;从视觉上来说有着下划线的a标签总是感觉很…

mysql 批量添加字段前缀_MySQL中批量前缀表的sql语句

1、批量删除前缀表sql语句先查询生成需要操作的表Select CONCAT( drop table , table_name, ; )FROM information_schema.tablesWhere table_name LIKE ngis20201201_%; /* "ngis20201201_"为要删除的表前缀*/执行此SQL语句后会生成一串SQL语句&#xff0c;必须再执…

淘宝CSV每个字段的数据容量原来有限制的

淘宝CSV每个字段的数据容量原来是有限制的。不可大于25000个字符。 这一点我也是在淘宝助理中编辑商品时才发现的问题。 然而很多店铺的商品描述长度都大于这个数值。wyh? 这是因为他们做了某些淘宝的的商品推广服务。 可能这些超过字符数的商品下载到淘宝助中时&#xff0c;其…

133-PHP子类无法重写父类private同名函数

<?phpclass father{ //定义father类//定义protected成员方法protected function cook(){return protected cook;}protected function programme(){return protected programme;}protected function kung_fu(){return private kung fu;}}class son extends father{pr…

php ajax mysql 分页查询_PHP中使用jQuery+Ajax实现分页查询多功能操作(示例讲解)

1.首先做主页面Ajax_pag.php代码如下&#xff1a;Ajax做分页.header{margin-top: 20px;}关键字&#xff1a;地区代号地区名称父级代号2.然后做分页查询JS页面Ajax_pag.js代码如下&#xff1a;//ajax分页开始var ts 10;//每页显示的条数var page 1;//当前页$(document).ready(…

ajax modelbinder,.NET Core 使用ModelBinder去掉所有参数的空格

一.前言通过各种姿势搜索都没搜到这方面的,唯一找到一个比较符合的,但是只适合简单类型,而且代码还没贴全,心累。。然后查看官网和源码之后,发现继承并实现 IModelBinder和IModelBinderProvider 即可。我这里是WebApi,所以要区分绑定属性[FromBody]、[FromForm]等。不同的绑定方…

Aswing入门教程 1.6 颜色和填充

Aswing入门教程 1.6 颜色和填充作者&#xff1a;胡矿&#xff0c;iiley&#xff0c;Bill著作权所有&#xff0c;请勿转载www.flashseer.orgGoogle Dochttp://docs.google.com/Doc?iddnp8gdz_16d63xzwGraphics2D允许你利用刷子对象&#xff08;Bursh&#xff09;来进行颜色填充…

学习10:Python重要知识

Python易忽略知识 &#xff08;1&#xff09;print 默认输出是换行的&#xff0c;如果要实现不换行需要在变量末尾加上 end""&#xff1a; &#xff08;2&#xff09;isinstance 和 type 的区别在于&#xff1a;type()不会认为子类是一种父类类型。isinstance()会认为…

mc服务器word文件夹,我的世界服务器创建:MC个人服务器创建流程

:缺防盗等等乏的级高能功合&#xff1a;适友之间朋联机bkkuti务器服优点功&#xff1a;齐能全&#xff0c;插件样缺点多配置非常&#xff1a;复杂mi,encarft级升时的候能不步同新更适合&#xff1a;专服业务器第步、三硬配置件的世我服界器务建创首要具先备相不当的错络带宽网&…

mysql outfile csv_sql-MySQL导出到outfile:CSV转义字符

我有时间表的数据库表&#xff0c;其中包含一些常用字段。id, client_id, project_id, task_id, description, time, date还有更多&#xff0c;但这就是要点。我在该表上将导出导出到CSV文件过夜&#xff0c;以便为用户提供其数据的备份。 它也用作带有某些自定义报告的宏Excel…

悲观锁,乐观锁

乐观锁与悲观锁 北京这两天天气不好&#xff0c;时晴时阴&#xff0c;最近有有点累&#xff0c;所以在家里休息了两天&#xff0c;看了一下乐观锁与悲观锁&#xff0c;虽然没有茅塞顿开&#xff0c;但是也有点收获。 先想一想为什么要使用锁&#xff1f; 在用户访问你的网站时&…

求生之路2浩方联机开始显示服务器,求生之路2怎么联机_求生之路2浩方联机教程_快吧单机游戏...

今天为大家带来《求生之路2》浩方联机教程&#xff0c;和大家分享下求生之路2怎么联机&#xff0c;希望大家游戏愉快&#xff01;温馨提示&#xff1a;求生之路2最好玩的当然是多人联机进行游戏&#xff0c;目前比较不错的平台为浩方平台&#xff0c;在HF联机最重要的一点是必须…