zoukankan      html  css  js  c++  java
  • WebService基于soapheader的身份验证

    用WebService开发接口十分方便。但接口提供的数据不应是对所有人可见的,我们来利用SoapHeader写一个简单的身份验证Demo

    目录

    • 创建WebService项目(带SoapHeader)
    • 利用IIS发布WebService
    • 添加服务引用并利用SoapHeader验证访问接口的例子

    一、创建WebService项目

      以VisualStudio2010为例,创建ASP.NET空Web应用程序

      在WSTest项目下添加类,命名为“SoapHeaderHelper”

      代码如下:

     1 using System;
     2 using System.Collections.Generic;
     3 using System.Linq;
     4 using System.Web;
     5 
     6 namespace WSTest
     7 {
     8     public class SoapHeaderHelper : System.Web.Services.Protocols.SoapHeader
     9     {
    10         private string username = string.Empty;
    11         private string pwd = string.Empty;
    12 
    13         public string UserName
    14         {
    15             get { return username; }
    16             set { username = value; }
    17         }
    18         public string PWD
    19         {
    20             get { return pwd; }
    21             set { pwd = value; }
    22         }
    23         public SoapHeaderHelper()
    24         { }
    25         public SoapHeaderHelper(string name, string password)
    26         {
    27             username = name;
    28             pwd = password;
    29         }
    30 
    31         private bool IsValid(string nUserId, string nPassWord, out string nMsg)
    32         {
    33             nMsg = "";
    34             try
    35             {
    36                 //此处从数据库验证授权信息
    37                 if (nUserId == "admin" && nPassWord == "admin")
    38                 {
    39 
    40                     return true;
    41                 }
    42                 else
    43                 {
    44                     nMsg = "对不起,您无权调用Web服务";
    45                     return false;
    46                 }
    47             }
    48             catch
    49             {
    50                 nMsg = "对不起,您无权调用Web服务";
    51                 return false;
    52             }
    53         }
    54         public bool IsValid(out string nMsg)
    55         {
    56             return IsValid(username, pwd, out nMsg);
    57         }
    58     }
    59 }

    在WSTest项目下新建项“Web服务”,后缀为asmx

    代码如下:

     1 using System;
     2 using System.Collections.Generic;
     3 using System.Data;
     4 using System.IO;
     5 using System.Linq;
     6 using System.Web;
     7 using System.Web.Services;
     8 using System.Runtime.Serialization;
     9 using System.Text;
    10 using System.Web.Services.Protocols;
    11 using System.Xml;
    12 
    13 namespace WSTest
    14 {
    15     
    16     /// <summary>
    17     /// WebService1 的摘要说明
    18     /// </summary>
    19     [WebService(Namespace = "http://localhost/")]
    20     [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    21     [System.ComponentModel.ToolboxItem(false)]
    22     // 若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消对下行的注释。
    23     // [System.Web.Script.Services.ScriptService]
    24     public class WebService1 : System.Web.Services.WebService
    25     {
    26 
    27         public SoapHeaderHelper soapheader = new SoapHeaderHelper();
    28         //该方法不进行身份验证,任何人都可访问
    29         [WebMethod]
    30         public string HelloWorld()
    31         {
    32             
    33             return "Hello World";
    34         }
    35 
    36         //该地方是调用SoapHeader地方,注意观察
    37         [SoapHeader("soapheader")]
    38         [WebMethod]
    39         public string HelloWorld2()
    40         {
    41             string msg = "";
    42             if (!soapheader.IsValid(out msg))
    43             {
    44                 return msg;
    45             }
    46             return "Hello World2";
    47         }
    48     }
    49 }

    二、利用IIS发布WebService

    右击项目->发布->发布项目选择“文件系统”->选择一个路径->点击发布

    打开IIS管理器

    右击网站->添加网站

     

    与发布普通网站不同的是,需要添加一个默认路径

    添加完成后就可以通过浏览器访问到该服务

    三、添加服务引用并利用SoapHeader验证访问接口的例子

     创建新项目->控制台应用程序->命名为WSClient->右击引用->添加服务引用

    引用完成后的目录结构

    在Program.cs内添加如下代码:

     1 using System;
     2 using System.Collections.Generic;
     3 using System.Linq;
     4 using System.Text;
     5 using System.Xml;
     6 
     7 namespace WSClient
     8 {
     9     class Program
    10     {
    11         static void Main(string[] args)
    12         {
    13             
    14             ServiceReference1.WebService1SoapClient sr = new ServiceReference1.WebService1SoapClient();
    15             //无身份验证的HelloWorld
    16             var demo1 = sr.HelloWorld();
    17             Console.WriteLine("demo1:"+demo1);
    18             //有身份验证的HelloWorld2,但请求接口时不携带身份信息
    19             var demo2 = sr.HelloWorld2(null);
    20             Console.WriteLine("demo2:" + demo2);
    21             //有身份验证的HelloWordl2,利用soapHeader提交身份信息
    22             ServiceReference1.SoapHeaderHelper soapHeader = new ServiceReference1.SoapHeaderHelper();
    23             soapHeader.UserName = "admin";
    24             soapHeader.PWD = "admin";
    25             var demo3 = sr.HelloWorld2(soapHeader);
    26             Console.WriteLine("demo3:" + demo3);
    27             Console.ReadKey();
    28         }
    29     }
    30 }

    执行结果:

     demo下载:https://github.com/FB208/Blog_WebServiceDemo

  • 相关阅读:
    深入浅出理解Javascript原型概念以及继承机制(转)
    表达式计算器的实现
    C#中使用Oracle存储过程返回结果集
    基于.Net的单点登录(SSO)解决方案
    让Windows Server 2008 + IIS 7+ ASP.NET 支持10万并发请求
    项目经理应该把30%的时间用在编程上(转)
    我是如何打败拖延症的(转)
    我不是个内向的程序员,我只是很忙(转)
    这个项目要多久开发完成?(转)
    从零开始编写自己的C#框架(3)——开发规范(转)
  • 原文地址:https://www.cnblogs.com/fb208/p/8479217.html
Copyright © 2011-2022 走看看