MessageContractAttribute 클래스

정의

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, AllowMultiple=false)]
public sealed class MessageContractAttribute : Attribute
public sealed class MessageContractAttribute : Attribute
[System.AttributeUsage(System.AttributeTargets.Class | System.AttributeTargets.Struct)]
public sealed class MessageContractAttribute : Attribute
[<System.AttributeUsage(System.AttributeTargets.Class | System.AttributeTargets.Struct, AllowMultiple=false)>]
type MessageContractAttribute = class
    inherit Attribute
type MessageContractAttribute = class
    inherit Attribute
[<System.AttributeUsage(System.AttributeTargets.Class | System.AttributeTargets.Struct)>]
type MessageContractAttribute = class
    inherit Attribute
Public NotInheritable Class MessageContractAttribute
Inherits Attribute
상속
MessageContractAttribute
특성

예제

다음 코드 예제에서는를 사용 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

설명

특성을 사용 MessageContractAttribute 하 여 특정 메시지에 대 한 SOAP 봉투의 구조를 지정 합니다.Use the MessageContractAttribute attribute to specify the structure of the SOAP envelope for a particular message. 그러면 서비스는 서비스 작업에서 메시지를 매개 변수 또는 반환 형식으로 사용할 수 있습니다.Your service can then use the message as a parameter or return type in service operations. 기본 SOAP 봉투 자체를 수정 하지 않고 SOAP 본문 내용의 serialization을 제어 하는 방법에 대 한 자세한 내용은 System.Runtime.Serialization.DataContractAttribute 서비스 계약의 데이터 전송 지정데이터 계약 사용을 참조 하세요.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.

참고

일반 직렬화 가능 매개 변수를 사용 하 여 서비스 작업에서 사용자 지정 메시지 유형을 사용할 수 없습니다.You cannot use custom message types in your service operation with regular serializable parameters. 사용자 지정 메시지 유형 또는 개체가 아닌 serialize 할 수 있는 매개 변수를 사용 Message 합니다.Either use custom message types or serializable parameters that are not Message objects. 자세한 내용은 서비스 계약의 데이터 전송 지정을 참조 하세요.For details, see , Specifying Data Transfer in Service Contracts.

형식에 대 한 메시지 계약을 구현 하려면에 주석을 달고 MessageContractAttribute , 또는를 사용 하 여 클래스의 필드 또는 속성 중 하나 이상에 주석을 추가 MessageBodyMemberAttribute MessageHeaderAttribute 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.

참고

System.ServiceModel.MessageParameterAttribute 는 메시지 계약 특성이 아니므로와 함께 사용할 수 없습니다 MessageContractAttribute .System.ServiceModel.MessageParameterAttribute is not a message contract attribute and cannot be used in conjunction with MessageContractAttribute.

Action및 속성을 사용 ReplyAction 하 여 <Action> SOAP 메시지에서 요소의 값을 지정 합니다.Use the Action and ReplyAction properties to specify the value of the <Action> element in the SOAP message.

  • HasProtectionLevel및 속성을 사용 ProtectionLevel 하 여 SOAP 메시지 유형에 보호 수준이 있는지 여부를 나타내고, 그렇지 않으면 무엇 인지를 나타냅니다.Use the HasProtectionLevel and ProtectionLevel properties to indicate whether the SOAP message type has a protection level, and if so, what it is.

  • 속성을 사용 IsWrapped 하 여 메시지 본문에 래퍼 요소가 있는지 여부를 나타내고, 그렇다면 및 속성을 사용 WrapperName 하 여 WrapperNamespace 줄 바꿈 요소의 이름과 네임 스페이스를 각각 지정 합니다.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.

자세한 내용은 메시지 계약 사용을 참조 하세요.For more information, see Using Message Contracts.

생성자

MessageContractAttribute()

MessageContractAttribute 클래스의 새 인스턴스를 초기화합니다.Initializes a new instance of the MessageContractAttribute class.

속성

HasProtectionLevel

메시지에 보호 수준이 있는지 여부를 나타내는 값을 가져옵니다.Gets a value that indicates whether the message has a protection level.

IsWrapped

메시지 본문에 래퍼 요소가 있는지 여부를 지정하는 값을 가져오거나 설정합니다.Gets or sets a value that specifies whether the message body has a wrapper element.

ProtectionLevel

메시지 암호화, 서명 또는 두 가지 모두가 필요한지 여부를 지정하는 값을 가져오거나 설정합니다.Gets or sets a value that specified whether the message must be encrypted, signed, or both.

TypeId

파생 클래스에서 구현된 경우 이 Attribute에 대한 고유 식별자를 가져옵니다.When implemented in a derived class, gets a unique identifier for this Attribute.

(다음에서 상속됨 Attribute)
WrapperName

메시지 본문의 래퍼 요소 이름을 가져오거나 설정합니다.Gets or sets the name of the wrapper element of the message body.

WrapperNamespace

메시지 본문 래퍼 요소의 네임스페이스를 가져오거나 설정합니다.Gets or sets the namespace of the message body wrapper element.

메서드

Equals(Object)

이 인스턴스가 지정된 개체와 같은지를 나타내는 값을 반환합니다.Returns a value that indicates whether this instance is equal to a specified object.

(다음에서 상속됨 Attribute)
GetHashCode()

이 인스턴스의 해시 코드를 반환합니다.Returns the hash code for this instance.

(다음에서 상속됨 Attribute)
GetType()

현재 인스턴스의 Type을 가져옵니다.Gets the Type of the current instance.

(다음에서 상속됨 Object)
IsDefaultAttribute()

파생 클래스에서 재정의된 경우 이 인스턴스 값이 파생 클래스에 대한 기본값인지 여부를 표시합니다.When overridden in a derived class, indicates whether the value of this instance is the default value for the derived class.

(다음에서 상속됨 Attribute)
Match(Object)

파생 클래스에서 재정의된 경우 이 인스턴스가 지정된 개체와 같은지 여부를 나타내는 값을 반환합니다.When overridden in a derived class, returns a value that indicates whether this instance equals a specified object.

(다음에서 상속됨 Attribute)
MemberwiseClone()

현재 Object의 단순 복사본을 만듭니다.Creates a shallow copy of the current Object.

(다음에서 상속됨 Object)
ToString()

현재 개체를 나타내는 문자열을 반환합니다.Returns a string that represents the current object.

(다음에서 상속됨 Object)

명시적 인터페이스 구현

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

이름 집합을 해당하는 디스패치 식별자 집합에 매핑합니다.Maps a set of names to a corresponding set of dispatch identifiers.

(다음에서 상속됨 Attribute)
_Attribute.GetTypeInfo(UInt32, UInt32, IntPtr)

인터페이스의 형식 정보를 가져오는 데 사용할 수 있는 개체의 형식 정보를 검색합니다.Retrieves the type information for an object, which can be used to get the type information for an interface.

(다음에서 상속됨 Attribute)
_Attribute.GetTypeInfoCount(UInt32)

개체에서 제공하는 형식 정보 인터페이스의 수를 검색합니다(0 또는 1).Retrieves the number of type information interfaces that an object provides (either 0 or 1).

(다음에서 상속됨 Attribute)
_Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr)

개체에서 노출하는 메서드와 속성에 대한 액세스를 제공합니다.Provides access to properties and methods exposed by an object.

(다음에서 상속됨 Attribute)

적용 대상