MessageContractAttribute 類別

定義

定義對應到 SOAP 訊息的強型別類別。

C#
[System.AttributeUsage(System.AttributeTargets.Class | System.AttributeTargets.Struct, AllowMultiple=false)]
public sealed class MessageContractAttribute : Attribute
繼承
MessageContractAttribute
屬性

範例

下列程式碼範例會示範如何使用 MessageContractAttribute 控制要求訊息和回應訊息的 SOAP 封套結構,並說明如何使用 MessageHeaderAttribute 建立回應訊息的 SOAP 標頭和使用 MessageBodyMemberAttribute 指定要求訊息和回應訊息的本文。 這個程式碼範例包含每個所傳送訊息的範例。

C#
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 物件的自訂訊息類型或可序列化參數。 如需詳細資訊,請參閱 在服務合約中指定資料傳輸

若要實作某類型的訊息合約,請使用 加以標註,並且使用 、 或 標註一個或多個類別欄位或屬性。

備註

System.ServiceModel.MessageParameterAttribute 不是訊息合約屬性,無法與 MessageContractAttribute 一起使用。

請使用 ActionReplyAction 屬性指定 SOAP 訊息中 <Action> 項目的值。

  • 請使用 HasProtectionLevelProtectionLevel 屬性指示 SOAP 訊息類型是否有保護層級,以及是哪一種層級 (如果有的話)。

  • 請使用 IsWrapped 屬性指示訊息本文是否有包裝函式項目,如果有的話,則使用 WrapperNameWrapperNamespace 屬性分別指定包裝函式項目的名稱和命名空間。

如需詳細資訊,請參閱 使用訊息合約

建構函式

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)

將一組名稱對應至一組對應的分派識別項 (Dispatch Identifier)。

(繼承來源 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