MessageContractAttribute MessageContractAttribute MessageContractAttribute MessageContractAttribute Class

Definición

Define una clase fuertemente tipada que corresponde a un mensaje SOAP.Defines a strongly-typed class that corresponds to a SOAP message.

public ref class MessageContractAttribute sealed : Attribute
[System.AttributeUsage(System.AttributeTargets.Class | System.AttributeTargets.Struct)]
[System.AttributeUsage(System.AttributeTargets.Class | System.AttributeTargets.Struct, AllowMultiple=false)]
public sealed class MessageContractAttribute : Attribute
type MessageContractAttribute = class
    inherit Attribute
Public NotInheritable Class MessageContractAttribute
Inherits Attribute
Herencia
MessageContractAttributeMessageContractAttributeMessageContractAttributeMessageContractAttribute
Atributos

Ejemplos

El siguiente ejemplo de código muestra el uso de MessageContractAttribute para controlar la estructura de envoltura SOAP para el mensaje de solicitud y el mensaje de respuesta, y el uso de MessageHeaderAttribute (para crear un encabezado SOAP para el mensaje de respuesta) y MessageBodyMemberAttribute (para especificar los cuerpos del mensaje de solicitud y respuesta).The following code example shows the use of the MessageContractAttribute to control the SOAP envelope structure for both the request message and the response message, and the use of both the MessageHeaderAttribute (to create a SOAP header for the response message) and the MessageBodyMemberAttribute (to specify the bodies of both the request and response message). El ejemplo de código contiene un ejemplo de cada mensaje cuando se envía.The code example contains an example of each message when sent.

using System;
using System.Collections.Generic;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.ServiceModel.Channels;

namespace Microsoft.WCF.Documentation
{
  [ServiceContract(Namespace = "Microsoft.WCF.Documentation")]
  interface IMessagingHello
  {
    [OperationContract(
     Action = "http://GreetingMessage/Action",
     ReplyAction = "http://HelloResponseMessage/Action"
    )]
    HelloResponseMessage Hello(HelloGreetingMessage msg);
  }

  [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 HelloGreetingMessage
  {
    private string localGreeting;

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

  /*
   The following is the request message, edited for clarity.
    
    <s:Envelope>
      <s:Header>
        <!-- Note: Some header content has been removed for clarity.
        <a:Action>http://GreetingMessage/Action</a:Action> 
        <a:To s:mustUnderstand="1"></a:To>
      </s:Header>
      <s:Body u:Id="_0" xmlns:u="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
        <HelloGreetingMessage xmlns="Microsoft.WCF.Documentation">
          <Salutations xmlns="http://www.examples.com">Hello.</Salutations>
        </HelloGreetingMessage>
      </s:Body>
   </s:Envelope>
   */

  class MessagingHello : IMessagingHello
  {
    public HelloResponseMessage Hello(HelloGreetingMessage msg)
    {
      Console.WriteLine("Caller sent: " + msg.Greeting);
      HelloResponseMessage responseMsg = new HelloResponseMessage();
      responseMsg.Response = "Service received: " + msg.Greeting;
      responseMsg.ExtraValues = String.Format("Served by object {0}.", this.GetHashCode().ToString());
      Console.WriteLine("Returned response message.");
      return responseMsg;
    }
  }
}
Imports System.Runtime.Serialization
Imports System.ServiceModel
Imports System.ServiceModel.Channels

Namespace Microsoft.WCF.Documentation
  <ServiceContract(Namespace := "Microsoft.WCF.Documentation")> _
  Friend Interface IMessagingHello
	<OperationContract(Action := "http://GreetingMessage/Action", ReplyAction := "http://HelloResponseMessage/Action")> _
	Function Hello(ByVal msg As HelloGreetingMessage) As HelloResponseMessage
  End Interface

  <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
  <MessageContract> _
  Public Class HelloGreetingMessage
	Private localGreeting As String

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

'  
'   The following is the request message, edited for clarity.
'    
'    <s:Envelope>
'      <s:Header>
'        <!-- Note: Some header content has been removed for clarity.
'        <a:Action>http://GreetingMessage/Action</a:Action> 
'        <a:To s:mustUnderstand="1"></a:To>
'      </s:Header>
'      <s:Body u:Id="_0" xmlns:u="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
'        <HelloGreetingMessage xmlns="Microsoft.WCF.Documentation">
'          <Salutations xmlns="http://www.examples.com">Hello.</Salutations>
'      </s:Body>
'   </s:Envelope>
'   

  Friend Class MessagingHello
	  Implements IMessagingHello
	Public Function Hello(ByVal msg As HelloGreetingMessage) As HelloResponseMessage Implements IMessagingHello.Hello
	  Console.WriteLine("Caller sent: " & msg.Greeting)
	  Dim responseMsg As New HelloResponseMessage()
	  responseMsg.Response = "Service received: " & msg.Greeting
	  responseMsg.ExtraValues = String.Format("Served by object {0}.", Me.GetHashCode().ToString())
	  Console.WriteLine("Returned response message.")
	  Return responseMsg
	End Function
  End Class
End Namespace

Comentarios

Utilice el atributo MessageContractAttribute para especificar la estructura del sobre de SOAP para un mensaje determinado.Use the MessageContractAttribute attribute to specify the structure of the SOAP envelope for a particular message. Su servicio puede utilizar a continuación el mensaje como un parámetro o tipo de valor devuelto en operaciones del servicio.Your service can then use the message as a parameter or return type in service operations. Para obtener información acerca de cómo controlar la serialización del contenido de un cuerpo SOAP sin modificar el propio sobre SOAP predeterminado, consulte System.Runtime.Serialization.DataContractAttribute, Specifying Data Transfer in Service Contracts, y Using Los contratos de datos.For information about controlling the serialization of the contents of a SOAP body without modifying the default SOAP envelope itself, see System.Runtime.Serialization.DataContractAttribute, Specifying Data Transfer in Service Contracts, and Using Data Contracts.

Nota

No puede utilizar tipos de mensaje personalizados en su operación del servicio con parámetros serializables normales.You cannot use custom message types in your service operation with regular serializable parameters. Utilice tipos de mensaje personalizados o parámetros serializables que no sean objetos Message.Either use custom message types or serializable parameters that are not Message objects. Para obtener más información, vea, Specifying Data Transfer in Service Contracts.For details, see , Specifying Data Transfer in Service Contracts.

Para implementar un contrato del mensaje para un tipo, anótelo con MessageContractAttribute y anote uno o más de los campos o propiedades de clase con MessageBodyMemberAttribute, MessageHeaderAttribute o MessageHeaderArrayAttribute.To implement a message contract for a type, annotate it with MessageContractAttribute and annotate one or more of the class's fields or properties with MessageBodyMemberAttribute, MessageHeaderAttribute, or MessageHeaderArrayAttribute.

Nota

System.ServiceModel.MessageParameterAttribute no es un atributo de contrato de mensaje y no se utiliza junto con MessageContractAttribute.System.ServiceModel.MessageParameterAttribute is not a message contract attribute and cannot be used in conjunction with MessageContractAttribute.

Utilice las propiedades Action y ReplyAction para especificar el valor del elemento <Action> en el mensaje SOAP.Use the Action and ReplyAction properties to specify the value of the <Action> element in the SOAP message.

  • Utilice las propiedades HasProtectionLevel y ProtectionLevel para indicar si el tipo de mensaje SOAP tiene un nivel de protección y, en ese caso, cuál es.Use the HasProtectionLevel and ProtectionLevel properties to indicate whether the SOAP message type has a protection level, and if so, what it is.

  • Utilice la propiedad IsWrapped para indicar si el cuerpo del mensaje tiene un elemento contenedor y, en ese caso, utilice las propiedades WrapperName y WrapperNamespace para especificar el nombre y espacio de nombres, respectivamente, del elemento de ajuste.Use the IsWrapped property to indicate whether the message body has a wrapper element, and if so, use the WrapperName and WrapperNamespace properties to specify the name and namespace, respectively, of the wrapping element.

Para obtener más información, consulte Using Message Contracts.For more information, see Using Message Contracts.

Constructores

MessageContractAttribute() MessageContractAttribute() MessageContractAttribute() MessageContractAttribute()

Inicializa una nueva instancia de la clase MessageContractAttribute.Initializes a new instance of the MessageContractAttribute class.

Propiedades

HasProtectionLevel HasProtectionLevel HasProtectionLevel HasProtectionLevel

Obtiene un valor que indica si el mensaje tiene un nivel de protección.Gets a value that indicates whether the message has a protection level.

IsWrapped IsWrapped IsWrapped IsWrapped

Obtiene o establece un valor que especifica si el cuerpo del mensaje tiene un elemento contenedor.Gets or sets a value that specifies whether the message body has a wrapper element.

ProtectionLevel ProtectionLevel ProtectionLevel ProtectionLevel

Obtiene o establece un valor que especifica si los mensajes deben cifrarse, firmarse o las dos cosas.Gets or sets a value that specified whether the message must be encrypted, signed, or both.

TypeId TypeId TypeId TypeId

Cuando se implementa en una clase derivada, obtiene un identificador único para este Attribute.When implemented in a derived class, gets a unique identifier for this Attribute.

(Inherited from Attribute)
WrapperName WrapperName WrapperName WrapperName

Obtiene o establece el nombre del elemento contenedor del cuerpo del mensaje.Gets or sets the name of the wrapper element of the message body.

WrapperNamespace WrapperNamespace WrapperNamespace WrapperNamespace

Obtiene o establece el espacio de nombres del elemento contenedor del cuerpo del mensaje.Gets or sets the namespace of the message body wrapper element.

Métodos

Equals(Object) Equals(Object) Equals(Object) Equals(Object)

Devuelve un valor que indica si esta instancia es igual que un objeto especificado.Returns a value that indicates whether this instance is equal to a specified object.

(Inherited from Attribute)
GetHashCode() GetHashCode() GetHashCode() GetHashCode()

Devuelve el código hash de esta instancia.Returns the hash code for this instance.

(Inherited from Attribute)
GetType() GetType() GetType() GetType()

Obtiene el Type de la instancia actual.Gets the Type of the current instance.

(Inherited from Object)
IsDefaultAttribute() IsDefaultAttribute() IsDefaultAttribute() IsDefaultAttribute()

Si se reemplaza en una clase derivada, indica si el valor de esta instancia es el valor predeterminado de la clase derivada.When overridden in a derived class, indicates whether the value of this instance is the default value for the derived class.

(Inherited from Attribute)
Match(Object) Match(Object) Match(Object) Match(Object)

Cuando se invalida en una clase derivada, devuelve un valor que indica si esta instancia es igual a un objeto especificado.When overridden in a derived class, returns a value that indicates whether this instance equals a specified object.

(Inherited from Attribute)
MemberwiseClone() MemberwiseClone() MemberwiseClone() MemberwiseClone()

Crea una copia superficial del objeto Object actual.Creates a shallow copy of the current Object.

(Inherited from Object)
ToString() ToString() ToString() ToString()

Devuelve una cadena que representa el objeto actual.Returns a string that represents the current object.

(Inherited from Object)

Implementaciones de interfaz explícitas

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

Asigna un conjunto de nombres a un conjunto correspondiente de identificadores de envío.Maps a set of names to a corresponding set of dispatch identifiers.

(Inherited from Attribute)
_Attribute.GetTypeInfo(UInt32, UInt32, IntPtr) _Attribute.GetTypeInfo(UInt32, UInt32, IntPtr) _Attribute.GetTypeInfo(UInt32, UInt32, IntPtr) _Attribute.GetTypeInfo(UInt32, UInt32, IntPtr)

Obtiene la información de tipos de un objeto, que puede utilizarse para obtener la información de tipos de una interfaz.Retrieves the type information for an object, which can be used to get the type information for an interface.

(Inherited from Attribute)
_Attribute.GetTypeInfoCount(UInt32) _Attribute.GetTypeInfoCount(UInt32) _Attribute.GetTypeInfoCount(UInt32) _Attribute.GetTypeInfoCount(UInt32)

Recupera el número de interfaces de información de tipo que proporciona un objeto (0 ó 1).Retrieves the number of type information interfaces that an object provides (either 0 or 1).

(Inherited from Attribute)
_Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr) _Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr) _Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr) _Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr)

Proporciona acceso a las propiedades y los métodos expuestos por un objeto.Provides access to properties and methods exposed by an object.

(Inherited from Attribute)

Se aplica a