WebService 要来就是公平来的,如果有些方法不需要被别人使用,只允许通过特定许可的人使用,便可以用到 SoapHeader 验证。在 IssueVision 项目中就有用到。现在把一些东西记下来。

首先,新建一个项目(WinForm或Asp.net),我建的叫Win5,再在解决方案中加入一个 WebService,假设名字叫 Service。

在 WebService 中进行如下操作
1.加入一个自定义的 SoapHeader类,MySoapHeader。如下:

IssueVision 里的 SoapHeader 验证using System;
IssueVision 里的 SoapHeader 验证
using System.Data;
IssueVision 里的 SoapHeader 验证
using System.Configuration;
IssueVision 里的 SoapHeader 验证
using System.Web;
IssueVision 里的 SoapHeader 验证
using System.Web.Security;
IssueVision 里的 SoapHeader 验证
using System.Web.Services;
IssueVision 里的 SoapHeader 验证
using System.Web.Services.Protocols;
IssueVision 里的 SoapHeader 验证
IssueVision 里的 SoapHeader 验证

里面其实定义了Username,Password两个属性而已。

接下来定义对SoapHeader进行验证的类,为了简便,只检查一下是不是为 admin 而已。

IssueVision 里的 SoapHeader 验证using System;
IssueVision 里的 SoapHeader 验证
using System.Data;
IssueVision 里的 SoapHeader 验证
using System.Configuration;
IssueVision 里的 SoapHeader 验证
using System.Web;
IssueVision 里的 SoapHeader 验证
using System.Web.Security;
IssueVision 里的 SoapHeader 验证
using System.Web.Services;
IssueVision 里的 SoapHeader 验证
using System.Web.Services.Protocols;
IssueVision 里的 SoapHeader 验证

里面的 check 是检查用的方法,Service 是 WebSerice 的类名 srv是其一个变量,这个变量要的格式在 .asmx.cs 中有定义,这个方法并没有返回任何值,他也不需要返回值,如果通过验证,就什么都不用管,如果不通过验证,也不返回假值,而是直接抛出一个异常(SoapException)。这样一来,如果通不过验证,就会出现异常,自然也就得不到结果。

再来设计WebService 的主代码页,定义一个MySoapHeader 的属性用于验证。在每个 WebMethod 上加个 SoapHeader 这个标签,这样,就能得到客户端传来的 SoapHeader,在 WebMethod 里面,要用一个check方法来检查这个 SoapHeader 合法不。每个 WebMethod 都要,麻烦。

 

IssueVision 里的 SoapHeader 验证using System;
IssueVision 里的 SoapHeader 验证
using System.Web;
IssueVision 里的 SoapHeader 验证
using System.Web.Services;
IssueVision 里的 SoapHeader 验证
using System.Web.Services.Protocols;
IssueVision 里的 SoapHeader 验证
IssueVision 里的 SoapHeader 验证[WebService(Namespace 
= "http://tempuri.org/")]
IssueVision 里的 SoapHeader 验证[WebServiceBinding(ConformsTo 
= WsiProfiles.BasicProfile1_1)]
IssueVision 里的 SoapHeader 验证
public class Service : System.Web.Services.WebService

 

在这段代码中, HelloWorld 是可以任何调用的,而 Plus  就需要加入 SoapHeader 传进来,否则就会报错,得不到结果。

 

OK,WebService 告一段落,生成一下。下面是客户端,我用的是WinForms

将上面的 WebSerice 引用下来,叫做 localhost ,然后代码如下调用

IssueVision 里的 SoapHeader 验证using System;
IssueVision 里的 SoapHeader 验证
using System.Collections.Generic;
IssueVision 里的 SoapHeader 验证
using System.ComponentModel;
IssueVision 里的 SoapHeader 验证
using System.Data;
IssueVision 里的 SoapHeader 验证
using System.Drawing;
IssueVision 里的 SoapHeader 验证
using System.Text;
IssueVision 里的 SoapHeader 验证
using System.Windows.Forms;
IssueVision 里的 SoapHeader 验证
IssueVision 里的 SoapHeader 验证
namespace Win5
}

至此,全部完成。以后每种方法调用的时候,只要是 ws 的,都会加上 header 头,进行验证。客户端倒是省事,只要设置一次 SoapHeader 头,而服务端,将每个 WebMethod 都要验证一次 SoapHeader 头是否合法。

完成。

相关文章:

  • 2021-08-23
  • 2021-07-24
  • 2022-12-23
  • 2021-06-01
  • 2021-06-14
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2021-11-07
  • 2022-12-23
  • 2021-05-16
  • 2022-12-23
  • 2022-12-23
  • 2021-10-18
相关资源
相似解决方案