加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

WebServie中验证 SoapHeader

发布时间:2020-12-17 01:19:17 所属栏目:安全 来源:网络整理
导读:SoapHeader 多数情况下用来传递用户身份验证信息,当然它的作用远不止如此,有待于在实际应用中发掘。 SoapHeader 缺省情况下由客户端代理对象发送给 WebService ,当然我们可以通过 WebMethodAttribute.Direction 来改变传送方向。 SoapHeader 使用步骤: (


SoapHeader
多数情况下用来传递用户身份验证信息,当然它的作用远不止如此,有待于在实际应用中发掘。

SoapHeader
缺省情况下由客户端代理对象发送给 WebService,当然我们可以通过 WebMethodAttribute.Direction 来改变传送方向。

SoapHeader
使用步骤:

(1)
创建继承自 System.Web.WebServices.SoapHeader 的自定义 SoapHeader 类型。
(2)
WebService 中创建拥有 public 访问权限的自定义 SoapHeader 字段。
(3)
在需要使用 SoapHeader WebMethod 上添加 SoapHeaderAttribute 访问特性。SoapHeaderAttribute 构造必须指定 memberName 参数,就是我们在第二步中申明的字段名称。
(4)
生成器会自动为客户端生成同名的自定义 SoapHeader 类型,只不过比起我们在 WebService 端创建的要复杂一些。同时还会为代理类型添加一个 soapheaderValue 属性。

在下面的演示代码,客户端将传递一个自定义 MyHeader WebService。请注意,我们尽管在 WebService 中申明了 MyHeader 字段,但并没有创建对象实例,这是因为客户端传递过来的 XML 中包含了 SoapHeader 信息,基础结构会自动解析并创建对象实例,然后赋值给 my 字段。至于客户端,自然需要创建一个 MyHeader 对象实例,并赋值给 WebService.MyHeaderValue 属性。SoapHeaderAttribute.Direction 缺省就是 In,下面例子中的 "Direction = SoapHeaderDirection.In " 可以省略。

WebServices.cs
public class MyHeader : SoapHeader
{
public string Username;
public string Password;
}

[WebService(Namespace = "http://www.rainsts.net/ ",Description= "
我的Web服务 ")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
public class WebService : System.Web.Services.WebService
{
public MyHeader my;

[WebMethod]
[SoapHeader( "my ",Direction = SoapHeaderDirection.In)]
public void TestSoapHeadIn()
{
System.Diagnostics.Debug.Write(my.Username);
System.Diagnostics.Debug.Write(my.Password);
}
}

Client.cs
WebService ws = new WebService();

MyHeader head = new MyHeader(); // 此时不传入时,些验证不能过--应用的话,使这点就可以
head.Username = "u2 ";
head.Password = "p2 ";

ws.MyHeadValue = head;
ws.TestSoapHeadIn();

我们改写一下,将传递方向改为从 WebService 到客户端。自然我们需要调整 "Direction = SoapHeaderDirection.Out ",在 WebMethod 中我们还必须创建 MyHeader 实例,因为这次我们不会接受到客户端传递的 SoapHeader 了。客户端代理对象调用 WebMethod 后就可以使用 MyHeaderValue 属性访问其内容了。

WebServices.cs
public class MyHeader : SoapHeader
{
public string Username;
public string Password;
}

[WebService(Namespace = "http://www.rainsts.net/ ",Description= "
我的Web服务 ")] [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] public class WebService : System.Web.Services.WebService { public MyHeader my; [WebMethod] [SoapHeader( "my ",Direction = SoapHeaderDirection.Out)] public void TestSoapHeadOut() { my = new MyHeader(); my.Username = "u1 "; my.Password = "p1 "; } } Client.cs WebService ws = new WebService(); ws.TestSoapHeadOut(); Console.WriteLine(ws.MyHeaderValue.Username); Console.WriteLine(ws.MyHeaderValue.Password);

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读