MessageBodyMemberAttribute MessageBodyMemberAttribute MessageBodyMemberAttribute MessageBodyMemberAttribute Class

定义

指定将成员序列化为 SOAP 正文中的元素。Specifies that a member is serialized as an element inside the SOAP body.

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

示例

下面的代码示例演示如何使用 MessageContractAttribute 来控制请求消息和响应消息的 SOAP 信封结构,以及如何使用 MessageHeaderAttribute(创建响应消息的 SOAP 标头)和 MessageBodyMemberAttribute(指定请求消息和响应消息的正文)。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). 此代码示例包含发送时的每个消息的示例。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

注解

使用 MessageBodyMemberAttribute 属性可以指定将数据成员序列化到 SOAP 正文,并控制某些序列化项目。Use the MessageBodyMemberAttribute attribute to specify that a data member is serialized into the SOAP body and to control some serialization items.

Order 属性用于指定默认字母顺序不适用时的正文部分顺序。The Order property is used to specify the order of body parts in cases where the default alphabetical order is not appropriate.

其他属性是从基类 System.ServiceModel.MessageContractMemberAttribute 继承而来。The other properties are inherited from the base class, System.ServiceModel.MessageContractMemberAttribute.

有关不修改默认 SOAP 信封本身的情况下控制 SOAP 正文内容序列化的详细信息,请参阅System.Runtime.Serialization.DataContractAttributeSpecifying Data Transfer in Service Contracts,和使用数据协定For more 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.

有关详细信息,请参阅Using Message ContractsFor more information, see Using Message Contracts.

构造函数

MessageBodyMemberAttribute() MessageBodyMemberAttribute() MessageBodyMemberAttribute() MessageBodyMemberAttribute()

初始化 MessageBodyMemberAttribute 类的新实例。Initializes a new instance of the MessageBodyMemberAttribute class.

属性

HasProtectionLevel HasProtectionLevel HasProtectionLevel HasProtectionLevel

当在派生类中重写时,获取一个指示成员是否具有分配的保护级别的值。When overridden in a derived class, gets a value that indicates whether the member has a protection level assigned.

(Inherited from MessageContractMemberAttribute)
Name Name Name Name

指定与此成员对应的元素的名称。Specifies the name of the element that corresponds to this member.

(Inherited from MessageContractMemberAttribute)
Namespace Namespace Namespace Namespace

指定与此成员对应的元素的命名空间。Specifies the namespace of the element that corresponds to this member.

(Inherited from MessageContractMemberAttribute)
Order Order Order Order

获取和设置一个值,该值指示将成员序列化到 SOAP 正文中的位置。Gets or sets a value that indicates the position in which the member is serialized into the SOAP body.

ProtectionLevel ProtectionLevel ProtectionLevel ProtectionLevel

指定该成员是否按原样传输,是否已签名或是否已签名和加密。Specifies whether the member is to be transmitted as-is, signed, or signed and encrypted.

(Inherited from MessageContractMemberAttribute)
TypeId TypeId TypeId TypeId

在派生类中实现时,获取此 Attribute 的唯一标识符。When implemented in a derived class, gets a unique identifier for this Attribute.

(Inherited from Attribute)

方法

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

返回一个值,该值指示此实例是否与指定的对象相等。Returns a value that indicates whether this instance is equal to a specified object.

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

返回此实例的哈希代码。Returns the hash code for this instance.

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

获取当前实例的 TypeGets the Type of the current instance.

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

在派生类中重写时,指示此实例的值是否是派生类的默认值。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)

当在派生类中重写时,返回一个指示此实例是否等于指定对象的值。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()

创建当前 Object 的浅表副本。Creates a shallow copy of the current Object.

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

返回表示当前对象的字符串。Returns a string that represents the current object.

(Inherited from Object)

显式界面实现

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

将一组名称映射为对应的一组调度标识符。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)

检索对象的类型信息,然后可以使用该信息获取接口的类型信息。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)

检索对象提供的类型信息接口的数量(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)

提供对某一对象公开的属性和方法的访问。Provides access to properties and methods exposed by an object.

(Inherited from Attribute)

适用于