灵活定义和处理SOAP头消息

原创 2003年06月01日 23:01:00

     XML 文档中编码的数据是该格式的一部分。XML 文档由根 Envelope 标记组成,而该标记又由必需的 Body 元素和可选的 Header 元素组成。Body 元素由特定于消息的数据组成。可选的 Header 元素可以包含不与特定消息直接相关的附加消息。Header 元素的每个子元素都叫做 SOAP 标头。

虽然 SOAP 标头可以包含与该消息相关的数据(因为 SOAP 规范没有严格地定义 SOAP 标头的内容),但是它们通常包含 Web 服务器中基础结构处理的信息。

使用 ASP.NET 创建的 XML Web services 可以定义和操作 SOAP 标头。定义 SOAP 标头是通过定义表示特定 SOAP 标头中数据的类以及从 <?XML:NAMESPACE PREFIX = MSHelp NS = "http://msdn.microsoft.com/mshelp" />SoapHeader 类中派生该类完成的。

创建一个从 SoapHeader 类派生的类,其名称与 SOAP 标头的根元素匹配。

public class MyHeader : SoapHeader

添加公共字段或属性,与 SOAP 标头中每个元素的名称和它们各自的数据类型匹配。
例如,在给定以下 SOAP 标头的情况下,其后的类定义一个表示 SOAP 标头的类。

<soap:Header xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <MyHeader xmlns="http://www.contoso.com">
    <Username>MyUsername</Username>
    <Password>MyPassword</Password>
  </MyHeader>
</soap:Header>


public class MyHeader : SoapHeader
{
   public string Username;
   public string Password;
}

在 XML Web services 中处理 SOAP 标头

将公共成员添加到实现表示 SOAP 标头类型的 XML Web services 的类。
[WebService(Namespace="http://www.contoso.com")]
public class MyWebService
{
    // Add a member variable of the type deriving from SoapHeader.
    public MyHeader myHeaderMemberVariable;

将 SoapHeader 属性应用于要处理 SOAP 标头的每个 XML Web services 方法。将 SoapHeader 特性的 MemberName 属性设置为第一步中创建的成员变量的名称。 
    [WebMethod]
    [SoapHeader("myHeaderMemberVariable")]
    public void MyWebMethod()

在应用 SoapHeader 特性的每个 XML Web services 方法中,访问在第一步中创建的成员变量以处理在 SOAP 标头中发送的数据。 
    [WebMethod]
    [SoapHeader("myHeaderMemberVariable")]
    public void MyWebMethod()
    {
        // Process the SoapHeader.
        if (myHeaderMemberVariable.Username == "admin")
        {
           // Do something interesting.
        }
    }

实例:

MyWebService XML Web services 具有一个名为 myHeaderMemberVariable 的成员变量,该成员变量属于从 SoapHeader (MyHeader) 派生的类型并设置为 SoapHeader 特性的 MemberName 属性。另外,将 SoapHeader 特性应用于指定 myHeaderMemberVariable 成员变量的 MyWebMethod XML Web services 方法。在 MyWebMethod XML Web services 方法中,访问 myHeaderMemberVariable 成员变量来获取 SOAP 标头的 Username XML 元素的值。

<%@ WebService Language="C#" Class="MyWebService" %>
using System.Web.Services;
using System.Web.Services.Protocols;

// Define a SOAP header by deriving from the SoapHeader base class.
public class MyHeader : SoapHeader
{
    public string Username;
    public string Password;
}

[WebService(Namespace="http://www.contoso.com")]
public class MyWebService
{
    // Add a member variable of the type deriving from SoapHeader.
    public MyHeader myHeaderMemberVariable;
 
    // Apply a SoapHeader attribute.
    [WebMethod]
    [SoapHeader("myHeaderMemberVariable")]
    public void MyWebMethod()
    {
        // Process the SoapHeader.
        if (myHeaderMemberVariable.Username == "admin")
        {
           // Do something interesting.
        }
    }
}

生成处理 SOAP 标头的客户端
当与 XML Web services 进行通讯时,XML Web services 客户端可以发送和接收 SOAP 标头。当使用 Wsdl.exe 实用工具为预期或返回 SOAP 标头的 XML Web services 生成代理类时,该代理类包括有关 SOAP 标头的信息。明确地说,代理类具有表示 SOAP 标头的成员变量,这些 SOAP 标头与 XML Web services 中的 SOAP 标头互相关联。代理类也具有表示 SOAP 标头的相应的类的定义。例如,为上面的 XML Web services 生成的代理类将具有一个 MyHeader 类型的成员变量以及 MyHeader 类的定义。

创建表示 SOAP 标头的类的新实例。

MyHeader mySoapHeader = new MyHeader();

为该 SOAP 标头填充值。

mySoapHeader.Username = "username";
mySoapHeader.Password = "password";

创建该代理类的新实例。

MyWebService proxy = new MyWebService();

将该 SOAP 标头对象分配到表示 SOAP 标头的代理类的成员变量。

proxy.MyHeaderValue = mySoapHeader
对与 XML Web services 方法通讯的代理类调用方法。
发送到 XML Web services 的 SOAP 请求的 SOAP 标头部分将包括存储在 SOAP 标头对象中数据的内容。

string results = proxy.MyWebMethod();

下面演示如何将 SOAP 标头从客户端传递到 XML Web services。

<%@ Page Language="C#" %>

<asp:Label id="ReturnValue" runat="server" />
<script runat=server language=c#>

 void Page_Load(Object o, EventArgs e)
 {

  MyHeader mySoapHeader = new MyHeader();

  // Populate the values of the SOAP header.
  mySoapHeader.Username = "username";
  mySoapHeader.Password = "password";

  // Create a new instance of the proxy class.
  MyWebService proxy = new MyWebService();
 
  // Add the MyHeader SOAP header to the SOAP request.
  proxy.MyHeaderValue = mySoapHeader;

  // Call the method on the proxy class that communicates with
  // your XML Web service method.
  string results = proxy.MyWebMethod();

  // Display the results of the method in a label.
  ReturnValue.Text = results;
 }
</script>

SOAP消息头的处理

SOAP消息头通常包含与消息体或SOAP处理(应用)方式相关的信息,比如消息路径、数字签名、认证信息,消息关联性信息、消息体的加密公匙等等。 下面我们以一个简单的权限认证的示例,来讲解如何添加和...
  • linjingj
  • linjingj
  • 2014年01月30日 10:10
  • 3063

Axis2用法——soap消息携带消息头

1、消息头定义 一般soap消息中,消息体是携带消息的核心内容;消息头中的字段,多数用于校验。定义消息头,就相当于定义一个bean对象。本例中,在上一篇的继承上,为消息增加消息头,其中消息头核心...
  • x6582026
  • x6582026
  • 2016年08月12日 15:46
  • 836

SOAP消息的格式

SOAP消息的格式
  • zmycoco2
  • zmycoco2
  • 2013年11月06日 16:19
  • 1934

WCF笔记(3)发送和接收SOAP(消息)头

一、定义 消息头是附加信息,那有啥用呢?你可别说,有时候还真有不少用处。举个例子,WCF的身份验证是不是很麻烦?还要颁发什么证书的(当然不是荣誉证书),如果只是验证一个客户端的身份,如用户名什么的,...
  • ljf5566
  • ljf5566
  • 2013年03月14日 10:13
  • 3902

定义和处理 SOAP 头

 如何:定义和处理 SOAP 头 代码示例 使用 ASP.NET 创建的 Web 服务可以定义和处理 SOAP 头。定义 SOAP 头的过程是:定义表示特定 SOAP 头中数据的类,然后从 SoapH...
  • wei0527
  • wei0527
  • 2009年02月12日 15:38
  • 459

你会自定义SOAP头消息吗?

先请大家看一篇文章:Get a Handle on SOAP Headers http://www.aspnetpro.com/features/2002/10/asp200210dw_f/asp20...
  • abedon
  • abedon
  • 2002年10月29日 15:26
  • 2382

如何:定义和处理 SOAP 头

使用 ASP.NET 创建的 Web 服务可以定义和操作 SOAP 标头。通过在特定 SOAP 标头中定义表示数据的类并从 SoapHeader 类派生它,便可完成 SOAP 标头的定义。 定义...
  • runningwulf1
  • runningwulf1
  • 2015年03月25日 11:38
  • 116

webservice入门笔记二soap消息的处理

Soap消息的处理 首先,复习下,创建一个webservice服务。新建一个java工程 Soap。接口、接口、服务类分别如下: packagecom.zhutulang.soap; import...
  • zhutulang
  • zhutulang
  • 2016年04月11日 21:23
  • 1557

SOAP请求、响应报文格式

SOAP请求报文格式:   SOAP响应报文格式:
  • a19881029
  • a19881029
  • 2014年06月06日 11:12
  • 15072

SOAP消息的传递和处理(PAYLOAD方式)

/** * 消息的传递和处理(PAYLOAD) * 通过负载来传递 */ @Test public void test03() { try { //1.创建服务(Service) UR...
  • linjingj
  • linjingj
  • 2014年01月30日 10:10
  • 3001
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:灵活定义和处理SOAP头消息
举报原因:
原因补充:

(最多只允许输入30个字)