MessageHeaderAttribute Classe

Definizione

Specifica che un membro dati è un'intestazione di messaggio 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
Ereditarietà
Derivato
Attributi

Esempio

Nell'esempio di codice seguente viene illustrato come utilizzare MessageHeaderAttribute per creare un'intestazione SOAP per il messaggio di risposta le cui proprietà Name, Namespace e MustUnderstand sono impostate su valori appropriati per tale intestazione. L'esempio di codice è seguito da un esempio del messaggio quando viene inviato.

 [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

Commenti

L'attributo MessageHeaderAttribute consente di associare campi e proprietà di un tipo contrassegnato con l'attributo MessageContractAttribute alle intestazioni di messaggio SOAP. Il tipo del campo o della proprietà può essere semplice o composito, purché serializzabile.

Per informazioni sul controllo della serializzazione del contenuto di un corpo SOAP senza modificare la busta SOAP predefinita, vedere System.Runtime.Serialization.DataContractAttribute, Specifica del trasferimento dei dati nei contratti di servizio e Uso di contratti dati.

Per altre informazioni sulla creazione di contratti di messaggio, vedere Uso di contratti messaggio.

Lo standard SOAP definisce gli attributi che possono esistere in un'intestazione. Tali attributi sono:

  • Actor o Role (Actor in SOAP 1.1, Role in SOAP 1.2)

  • MustUnderstand

  • Relay

L'attributo Actor o Role specifica l'URI del nodo per cui è prevista una determinata intestazione. L'attributo MustUnderstand specifica se l'intestazione riconosce l'elaborazione del nodo. L'attributo Relay specifica se l'intestazione deve essere inoltrata ai nodi downstream. Windows Communication Foundation (WCF) non esegue alcuna elaborazione di questi attributi nei messaggi in ingresso, ad eccezione dell'attributoMustUnderstand.

Questi attributi possono tuttavia essere letti e modificati, anche se non sono inviati per impostazione predefinita. I valori di questi attributi possono essere impostati in due modi. Il primo modo consiste nel modificare le proprietà Actor, MustUnderstand e Relay dell'attributo MessageHeaderAttribute. (Non Role esiste alcuna proprietà : impostare la Actor proprietà e Role viene passata se viene usato SOAP 1.2). Ad esempio:

Il secondo modo per controllare questi attributi è impostare il parametro di tipo della classe MessageHeader<T> sul tipo di intestazione desiderato e quindi utilizzare il tipo ottenuto insieme all'attributo MessageHeaderAttribute. Infine, utilizzare a livello di programmazione le proprietà dell'intestazione MessageHeader<T> per impostare gli attributi SOAP. Ad esempio:

Se si utilizza sia il meccanismo di controllo dinamico sia quello statico, le impostazioni statiche rappresentano le impostazioni predefinite. In questo caso è tuttavia possibile ignorarle mediante il meccanismo dinamico. Ad esempio:

È consentito creare intestazioni ripetute dotate del controllo dinamico degli attributi. Ad esempio:

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

Sul lato ricevente, la lettura di questi attributi SOAP può essere eseguita solo se si utilizza la classe MessageHeader<T> generica. Per individuare le impostazioni degli attributi del messaggio ricevuto è possibile esaminare le proprietà Actor, Relay o MustUnderstand di un'intestazione di tipo MessageHeader<T>.

Quando si riceve un messaggio e quindi lo si invia nuovamente all'origine, il roundtrip delle impostazioni degli attributi SOAP viene eseguito solo per le intestazioni di tipo MessageHeader<T>.

Costruttori

MessageHeaderAttribute()

Inizializza una nuova istanza della classe MessageHeaderAttribute.

Proprietà

Actor

Consente di ottenere o impostare un URI che indica il nodo a cui è indirizzata questa intestazione. Tale URI è associato all'attributo di intestazione Role quando si utilizza SOAP 1.2 e all'attributo di intestazione Actor quando si utilizza SOAP 1.1.

HasProtectionLevel

Quando viene sottoposto a override in una classe derivata, consente di ottenere un valore che indica se al membro è stato assegnato un livello di protezione.

(Ereditato da MessageContractMemberAttribute)
MustUnderstand

Specifica se è necessario che il nodo che svolge il ruolo Actor riconosca questa intestazione. Questa proprietà è associata all'attributo di intestazione SOAP mustUnderstand.

Name

Specifica il nome dell'elemento che corrisponde a questo membro.

(Ereditato da MessageContractMemberAttribute)
Namespace

Specifica lo spazio dei nomi dell'elemento che corrisponde a questo membro.

(Ereditato da MessageContractMemberAttribute)
ProtectionLevel

Specifica se il membro deve essere trasmesso senza alcuna protezione, solo firmato oppure firmato e crittografato.

(Ereditato da MessageContractMemberAttribute)
Relay

Specifica se per questa intestazione è necessario eseguire il relaying ai nodi downstream. Questa proprietà è associata all'attributo di intestazione SOAP relay.

TypeId

Quando è implementata in una classe derivata, ottiene un identificatore univoco della classe Attribute.

(Ereditato da Attribute)

Metodi

Equals(Object)

Restituisce un valore che indica se questa istanza è uguale a un oggetto specificato.

(Ereditato da Attribute)
GetHashCode()

Restituisce il codice hash per l'istanza.

(Ereditato da Attribute)
GetType()

Ottiene l'oggetto Type dell'istanza corrente.

(Ereditato da Object)
IsDefaultAttribute()

In caso di override in una classe derivata, indica se il valore di questa istanza è il valore predefinito per la classe derivata.

(Ereditato da Attribute)
Match(Object)

Quando è sottoposto a override in una classe derivata, restituisce un valore che indica se questa istanza equivale a un oggetto specificato.

(Ereditato da Attribute)
MemberwiseClone()

Crea una copia superficiale dell'oggetto Object corrente.

(Ereditato da Object)
ToString()

Restituisce una stringa che rappresenta l'oggetto corrente.

(Ereditato da Object)

Implementazioni dell'interfaccia esplicita

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

Esegue il mapping di un set di nomi a un set corrispondente di ID dispatch.

(Ereditato da Attribute)
_Attribute.GetTypeInfo(UInt32, UInt32, IntPtr)

Recupera le informazioni sul tipo relative a un oggetto, che possono essere usate per ottenere informazioni sul tipo relative a un'interfaccia.

(Ereditato da Attribute)
_Attribute.GetTypeInfoCount(UInt32)

Recupera il numero delle interfacce di informazioni sul tipo fornite da un oggetto (0 o 1).

(Ereditato da Attribute)
_Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr)

Fornisce l'accesso a proprietà e metodi esposti da un oggetto.

(Ereditato da Attribute)

Si applica a