WebServie中验证 SoapHeader

来源:互联网 发布:sql更新数值怎么写 编辑:程序博客网 时间:2024/05/20 15:38


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);

原创粉丝点击