WebService基于soapheader的身份验证

2018-02-28 07:46:45来源:cnblogs.com作者:FB208人点击

分享
第七城市

用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 UserName14         {15             get { return username; }16             set { username = value; }17         }18         public string PWD19         {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             try35             {36                 //此处从数据库验证授权信息37                 if (nUserId == "admin" && nPassWord == "admin")38                 {39 40                     return true;41                 }42                 else43                 {44                     nMsg = "对不起,您无权调用Web服务";45                     return false;46                 }47             }48             catch49             {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 WSTest14 {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.WebService25     {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 Program10     {11         static void Main(string[] args)12         {13             14             ServiceReference1.WebService1SoapClient sr = new ServiceReference1.WebService1SoapClient();15             //无身份验证的HelloWorld16             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

第七城市

最新文章

123

最新摄影

闪念基因

微信扫一扫

第七城市微信公众平台