MessageHeaderAttribute 类

定义

指定数据成员为 SOAP 消息头。

public ref class MessageHeaderAttribute : System::ServiceModel::MessageContractMemberAttribute
[System.AttributeUsage(System.AttributeTargets.Field | System.AttributeTargets.Property, AllowMultiple=false, Inherited=false)]
public class MessageHeaderAttribute : System.ServiceModel.MessageContractMemberAttribute
[System.AttributeUsage(System.AttributeTargets.Field | System.AttributeTargets.Property, Inherited=false)]
public class MessageHeaderAttribute : System.ServiceModel.MessageContractMemberAttribute
[<System.AttributeUsage(System.AttributeTargets.Field | System.AttributeTargets.Property, AllowMultiple=false, Inherited=false)>]
type MessageHeaderAttribute = class
    inherit MessageContractMemberAttribute
[<System.AttributeUsage(System.AttributeTargets.Field | System.AttributeTargets.Property, Inherited=false)>]
type MessageHeaderAttribute = class
    inherit MessageContractMemberAttribute
Public Class MessageHeaderAttribute
Inherits MessageContractMemberAttribute
继承
派生
属性

示例

下面的代码示例演示如何使用 MessageHeaderAttribute 创建响应消息的 SOAP 标头,其中 NameNamespaceMustUnderstand 属性设置为适合于此标头的值。 此代码示例之后的示例为发送时的消息示例。

 [MessageContract]
 public class HelloResponseMessage
 {
   private string localResponse = String.Empty;
   private string extra = String.Empty;

   [MessageBodyMember(
     Name = "ResponseToGreeting",
     Namespace = "http://www.examples.com")]
   public string Response
   {
     get { return localResponse; }
     set { localResponse = value; }
   }

   [MessageHeader(
     Name = "OutOfBandData",
     Namespace = "http://www.examples.com",
     MustUnderstand=true
   )]
   public string ExtraValues
   {
     get { return extra; }
     set { this.extra = value; }
  }

  /*
   The following is the response message, edited for clarity.

   <s:Envelope>
     <s:Header>
       <a:Action s:mustUnderstand="1">http://HelloResponseMessage/Action</a:Action>
       <h:OutOfBandData s:mustUnderstand="1" xmlns:h="http://www.examples.com">Served by object 13804354.</h:OutOfBandData>
     </s:Header>
     <s:Body>
       <HelloResponseMessage xmlns="Microsoft.WCF.Documentation">
         <ResponseToGreeting xmlns="http://www.examples.com">Service received: Hello.</ResponseToGreeting>
       </HelloResponseMessage>
     </s:Body>
   </s:Envelope>
   */
}
  <MessageContract> _
  Public Class HelloResponseMessage
    Private localResponse As String = String.Empty
    Private extra As String = String.Empty

    <MessageBodyMember(Name := "ResponseToGreeting", Namespace := "http://www.examples.com")> _
    Public Property Response() As String
      Get
          Return localResponse
      End Get
      Set(ByVal value As String)
          localResponse = value
      End Set
    End Property

    <MessageHeader(Name := "OutOfBandData", Namespace := "http://www.examples.com", MustUnderstand:=True)> _
    Public Property ExtraValues() As String
      Get
          Return extra
      End Get
      Set(ByVal value As String)
          Me.extra = value
      End Set
    End Property

'   
'    The following is the response message, edited for clarity.
'    
'    <s:Envelope>
'      <s:Header>
'        <a:Action s:mustUnderstand="1">http://HelloResponseMessage/Action</a:Action>
'        <h:OutOfBandData s:mustUnderstand="1" xmlns:h="http://www.examples.com">Served by object 13804354.</h:OutOfBandData>
'      </s:Header>
'      <s:Body>
'        <HelloResponseMessage xmlns="Microsoft.WCF.Documentation">
'          <ResponseToGreeting xmlns="http://www.examples.com">Service received: Hello.</ResponseToGreeting>
'      </s:Body>    
'    </s:Envelope>
'    
  End Class

注解

MessageHeaderAttribute 特性允许您将用 MessageContractAttribute 特性标记的类型的字段和属性映射到 SOAP 消息头。 该字段或属性可以是简单类型,也可以是可序列化的复合类型。

有关在不修改默认 SOAP 信封本身的情况下控制 SOAP 正文内容的序列化的信息,请参阅 System.Runtime.Serialization.DataContractAttribute在服务协定中指定数据传输和使用 数据协定

有关创建消息协定的详细信息,请参阅 使用消息协定

SOAP 标准定义下列可在标头中存在的属性:

  • ActorRole(SOAP 1.1 中为 Actor,SOAP 1.2 中为 Role)。

  • MustUnderstand

  • Relay

ActorRole 属性指定需要给定标头的节点 URI。 MustUnderstand 属性指定标头是否理解节点的处理。 Relay 特性指定标头是否要中继到下游节点。 Windows Communication Foundation (WCF) 不会对传入消息执行这些属性的任何处理,但属性除外MustUnderstand

但是,即使默认情况下不发送这些属性,您也可以对它们进行读写。 可以通过以下两种方式设置特性值。 首先,可以在 Actor 中更改 MustUnderstandRelayMessageHeaderAttribute 属性。 (没有 Role 属性 - 设置 Actor 属性,并在 Role) 使用 SOAP 1.2 时传递。 例如:

控制这些属性的第二种方式是将所需标头类型设为 MessageHeader<T> 类的类型参数,然后将生成的类型与 MessageHeaderAttribute 一起使用。 然后,再以编程方式使用 MessageHeader<T> 属性设置这些 SOAP 特性。 例如:

如果同时使用了动态和静态控制机制,则静态设置为默认值,但可以使用动态机制重写。 例如:

允许使用动态属性控件创建重复的标头。 例如:

[MessageHeaderArray] public MessageHeader<Person> documentApprovers[];  

在接收端,仅当使用泛型 MessageHeader<T> 类时才能读取这些 SOAP 属性。 检查 Actor 类型标头的 RelayMustUnderstandMessageHeader<T> 属性以发现已接收消息的属性设置。

如果在接收一条消息后又发送回发送方,则仅对 MessageHeader<T> 类型的标头往返 SOAP 属性设置。

构造函数

MessageHeaderAttribute()

初始化 MessageHeaderAttribute 类的新实例。

属性

Actor

获取或设置一个指示此标头为目标的节点的 URI。 使用 SOAP 1.2 时映射到角色标头属性,而使用 SOAP 1.1 时则映射到参与者标头属性。

HasProtectionLevel

当在派生类中重写时,获取一个指示成员是否具有分配的保护级别的值。

(继承自 MessageContractMemberAttribute)
MustUnderstand

指定在 Actor 角色中起作用的节点是否必须理解此标头。 这将映射到 mustUnderstand SOAP 标头属性。

Name

指定与此成员对应的元素的名称。

(继承自 MessageContractMemberAttribute)
Namespace

指定与此成员对应的元素的命名空间。

(继承自 MessageContractMemberAttribute)
ProtectionLevel

指定该成员是否按原样传输,是否已签名或是否已签名和加密。

(继承自 MessageContractMemberAttribute)
Relay

指定此标头是否要中继至下游节点。 这将映射到 relay SOAP 标头属性。

TypeId

在派生类中实现时,获取此 Attribute 的唯一标识符。

(继承自 Attribute)

方法

Equals(Object)

返回一个值,该值指示此实例是否与指定的对象相等。

(继承自 Attribute)
GetHashCode()

返回此实例的哈希代码。

(继承自 Attribute)
GetType()

获取当前实例的 Type

(继承自 Object)
IsDefaultAttribute()

在派生类中重写时,指示此实例的值是否是派生类的默认值。

(继承自 Attribute)
Match(Object)

当在派生类中重写时,返回一个指示此实例是否等于指定对象的值。

(继承自 Attribute)
MemberwiseClone()

创建当前 Object 的浅表副本。

(继承自 Object)
ToString()

返回表示当前对象的字符串。

(继承自 Object)

显式接口实现

_Attribute.GetIDsOfNames(Guid, IntPtr, UInt32, UInt32, IntPtr)

将一组名称映射为对应的一组调度标识符。

(继承自 Attribute)
_Attribute.GetTypeInfo(UInt32, UInt32, IntPtr)

检索对象的类型信息,然后可以使用该信息获取接口的类型信息。

(继承自 Attribute)
_Attribute.GetTypeInfoCount(UInt32)

检索对象提供的类型信息接口的数量(0 或 1)。

(继承自 Attribute)
_Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr)

提供对某一对象公开的属性和方法的访问。

(继承自 Attribute)

适用于