Прочитать на английском

Поделиться через


MessageContractAttribute Класс

Определение

Определяет строго типизированный класс, соответствующий сообщению SOAP.

[System.AttributeUsage(System.AttributeTargets.Class | System.AttributeTargets.Struct, AllowMultiple=false)]
public sealed class MessageContractAttribute : Attribute
Наследование
MessageContractAttribute
Атрибуты

Примеры

В следующем примере кода показано использование MessageContractAttribute для управления структурой конверта SOAP для сообщения запроса и ответного сообщения, а также использование MessageHeaderAttribute (для создания заголовка SOAP для ответного сообщения) и MessageBodyMemberAttribute (для указания текста сообщения запроса и ответного сообщения). Пример кода содержит пример отправки каждого сообщения.

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;
    }
  }
}

Комментарии

Используйте атрибут MessageContractAttribute, чтобы задать структуру конверта SOAP для определенного сообщения. Ваша служба может использовать сообщение в качестве параметра или возвращаемого типа в операциях службы. Сведения об управлении сериализацией содержимого текста SOAP без изменения самого конверта SOAP по умолчанию см. в разделах System.Runtime.Serialization.DataContractAttribute, Указание передачи данных в контрактах служб и Использование контрактов данных.

Примечание

Пользовательские типы сообщений невозможно использовать в вашей операции службы с обычными сериализуемыми параметрами. Используйте либо пользовательские типы сообщений, либо сериализуемые параметры, не являющиеся объектами Message. Дополнительные сведения см. в разделе Указание передачи данных в контрактах служб.

Чтобы реализовать контракт сообщения для типа, аннотируйте его MessageContractAttribute, а также одно или несколько полей класса или свойств как MessageBodyMemberAttribute, MessageHeaderAttribute как MessageHeaderArrayAttribute.

Примечание

System.ServiceModel.MessageParameterAttribute не является атрибутом контракта сообщения и не может использоваться в сочетании с MessageContractAttribute.

Используйте свойства Action и ReplyAction, чтобы задать значение элемента <Action> в сообщении SOAP.

  • Используйте свойства HasProtectionLevel и ProtectionLevel, чтобы указать, имеет ли тип сообщения SOAP уровень защиты, и если да, то какой.

  • Используйте свойствоIsWrapped, чтобы указать, имеет ли текст сообщения элемент программы-оболочки, и если да, используйте свойства WrapperName и WrapperNamespace, чтобы задать имя и пространство имен элемента программы-оболочки соответственно.

Дополнительные сведения см. в разделе Использование контрактов сообщений.

Конструкторы

MessageContractAttribute()

Инициализирует новый экземпляр класса MessageContractAttribute.

Свойства

HasProtectionLevel

Возвращает значение, указывающее, присвоен ли сообщению уровень защиты.

IsWrapped

Возвращает или задает значение, указывающее, имеет ли текст сообщения элемент программы-оболочки.

ProtectionLevel

Возвращает или задает значение, указывающее, необходимо ли шифровать сообщение, подписывать его или и то и другое.

TypeId

В случае реализации в производном классе возвращает уникальный идентификатор для этого атрибута Attribute.

(Унаследовано от Attribute)
WrapperName

Возвращает или задает имя элемента программы-оболочки текста сообщения.

WrapperNamespace

Возвращает или задает пространство имен элемента программы-оболочки текста сообщения.

Методы

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)

Применяется к

Продукт Версии
.NET Core 1.0, Core 1.1, 8 (package-provided), 9 (package-provided), 10 (package-provided)
.NET Framework 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 2.0 (package-provided)
UWP 10.0