次の方法で共有


OperationContractAttribute クラス

定義

メソッドが、Windows Communication Foundation (WCF) アプリケーションのサービス コントラクトの一部である操作を定義することを示します。

public ref class OperationContractAttribute sealed : Attribute
[System.AttributeUsage(System.AttributeTargets.Method)]
public sealed class OperationContractAttribute : Attribute
[<System.AttributeUsage(System.AttributeTargets.Method)>]
type OperationContractAttribute = class
    inherit Attribute
Public NotInheritable Class OperationContractAttribute
Inherits Attribute
継承
OperationContractAttribute
属性

次のコード例は、1 つの操作を含む単純なサービス コントラクトを示しています。

using System;
using System.Collections.Generic;
using System.Net.Security;
using System.ServiceModel;
using System.Text;

namespace Microsoft.WCF.Documentation
{
  [ServiceContract(Namespace="Microsoft.WCF.Documentation")]
  public interface ISampleService{
    // This operation specifies an explicit protection level requirement.
    [OperationContract(ProtectionLevel=ProtectionLevel.EncryptAndSign)]
    string SampleMethod(string msg);
  }

  class SampleService : ISampleService
  {
  #region ISampleService Members

  public string  SampleMethod(string msg)
  {
    Console.WriteLine("Called with: {0}", msg);
      return "The service greets you: " + msg;
  }

  #endregion
  }
}
Imports System.Net.Security
Imports System.ServiceModel
Imports System.Text

Namespace Microsoft.WCF.Documentation
  <ServiceContract(Namespace:="Microsoft.WCF.Documentation")> _
  Public Interface ISampleService
    ' This operation specifies an explicit protection level requirement.
    <OperationContract(ProtectionLevel:=ProtectionLevel.EncryptAndSign)> _
    Function SampleMethod(ByVal msg As String) As String
  End Interface

  Friend Class SampleService
      Implements ISampleService
  #Region "ISampleService Members"

  Public Function SampleMethod(ByVal msg As String) As String Implements ISampleService.SampleMethod
    Console.WriteLine("Called with: {0}", msg)
       Return "The service greets you: " & msg
  End Function

  #End Region
  End Class
End Namespace

次の例は、3 つの操作を指定する暗黙的なサービス コントラクトを実装するサービスです。 2 つの操作は双方向の操作であり、戻り値が何であっても、基になる応答メッセージを呼び出し元に返します。 3 番目の操作は、基になる受信メッセージである呼び出しを受け取りますが、基になる応答メッセージは返しません。

[ServiceContractAttribute]
public class OneAndTwoWay
{
  // The client waits until a response message appears.
  [OperationContractAttribute]
  public int MethodOne (int x, out int y)
  {
    y = 34;
    return 0;
  }

  // The client waits until an empty response message appears.
  [OperationContractAttribute]
  public void MethodTwo (int x)
  {
    return;
  }

  // The client returns as soon as an outbound message
  // is dispatched to the service; no response
  // message is generated or sent from the service.
  [OperationContractAttribute(IsOneWay=true)]
  public void MethodThree (int x)
  {
    return;
  }
}

注釈

メソッドに OperationContractAttribute を適用して、メソッドがサービス コントラクトの一部としてサービス操作を実装することを示します ( ServiceContractAttribute 属性で指定)。

OperationContractAttributeプロパティを使用して、操作の構造とメタデータで表される値を制御します。

  • Action プロパティは、この操作を一意に識別するアクションを指定します。 WCF は、アクションに基づいて要求メッセージをメソッドにディスパッチします。

  • AsyncPattern プロパティは、操作が実装されているか、Begin メソッドと End メソッドのペアを使用して非同期的に呼び出すことができることを示します。

  • HasProtectionLevel プロパティは、ProtectionLevel プロパティが明示的に設定されているかどうかを示します。

  • IsOneWay プロパティは、操作が 1 つの入力メッセージのみで構成されていることを示します。 操作に関連付けられた出力メッセージがありません。

  • IsInitiating プロパティは、この操作をセッションの最初の操作にできるかどうかを指定します。

  • IsTerminating プロパティは、操作の完了後に WCF が現在のセッションを終了するかどうかを指定します。

  • ProtectionLevel プロパティは、実行時に操作に必要なメッセージ レベルのセキュリティを指定します。

  • ReplyAction プロパティは、操作の応答メッセージのアクションを指定します。

OperationContractAttribute属性は、メソッドがサービス コントラクト内の操作であることを宣言します。 サービス操作として公開されるのは、 OperationContractAttribute に属性付けされたメソッドだけです。 OperationContractAttributeでマークされたメソッドのないサービス コントラクトでは、操作は公開されません。

AsyncPattern プロパティは、Begin<methodName> メソッドと End<methodName> メソッドのペアが非同期的に実装された 1 つの操作を形成することを示します (クライアントとサービスのどちらでも)。 非同期的に操作を実装するサービスの機能は、サービス実装の詳細であり、メタデータ (Web サービス記述言語 (WSDL) など) では公開されません。

同様に、クライアントは、サービス メソッドの実装方法に関係なく、非同期的に操作を呼び出すことができます。 サービス メソッドに時間がかかるが、情報をクライアントに直接返す必要がある場合は、クライアントでのサービス操作の非同期呼び出しをお勧めします。 詳細については、 AsyncPatternを参照してください。

IsOneWay プロパティは、空の基になる応答メッセージを含め、メソッドが値をまったく返さないことを示します。 この種類のメソッドは、通知やイベント スタイルの通信に役立ちます。 この種類のメソッドは応答メッセージを返すことができないため、メソッドの宣言は void返す必要があります。

Important

この属性の情報ストアをプログラムで取得する場合は、リフレクションの代わりに ContractDescription クラスを使用します。

IsOneWay プロパティが false (既定値) に設定されている場合、voidを返す偶数メソッドは、基になるメッセージ レベルの双方向メソッドです。 この場合、インフラストラクチャは、メソッドが返したことを呼び出し元に示す空のメッセージを作成して送信します。 この方法を使用すると、アプリケーションとインフラストラクチャは、エラー情報 (SOAP エラーなど) をクライアントに送り返すことができます。 IsOneWaytrue に設定することは、応答メッセージの作成とディスパッチを防ぐ唯一の方法です。 詳細については、「 One-Way サービス」を参照してください。

ActionプロパティとReplyActionプロパティは、SOAP メッセージの既定のアクションを変更するだけでなく、認識されないメッセージのハンドラーを作成したり、ダイレクト メッセージ プログラミングのアクションの追加を無効にしたりするためにも使用できます。 IsInitiatingプロパティを使用して、クライアントが他の操作の前に特定のサービス操作を呼び出さないようにします。 クライアントが特定のサービス操作を呼び出した後に WCF でチャネルを閉じるには、 IsTerminating プロパティを使用します。 詳細については、「セッションの 使用」を参照してください。

ProtectionLevel プロパティを使用すると、操作メッセージが署名、暗号化、または署名および暗号化のどちらであるかを操作コントラクトで指定できます。 バインディングがコントラクトに必要なセキュリティ レベルを提供できない場合は、実行時に例外がスローされます。 詳細については、「 ProtectionLevel保護レベルについて」を参照してください。

コンストラクター

名前 説明
OperationContractAttribute()

OperationContractAttribute クラスの新しいインスタンスを初期化します。

プロパティ

名前 説明
Action

要求メッセージの WS-Addressing アクションを取得または設定します。

AsyncPattern

サービス コントラクト内の Begin<methodName> と End<methodName> メソッドのペアを使用して、操作が非同期に実装されることを示します。

HasProtectionLevel

この操作のメッセージの暗号化、署名、または両方が必要かどうかを示す値を取得または設定します。

IsInitiating

メソッドがサーバーでセッションを開始できる操作を実装するかどうかを示す値を取得または設定します (そのようなセッションが存在する場合)。

IsOneWay

操作が応答メッセージを返すかどうかを示す値を取得または設定します。

IsTerminating

応答メッセージが存在する場合に、そのメッセージの送信後にセッションを終了するようにサービス操作がサーバーに指示するかどうかを示す値を取得または設定します。

Name

操作の名前を取得します。値の設定も可能です。

ProtectionLevel

操作のメッセージの暗号化、署名、または両方が必要かどうかを示す値を取得または設定します。

ReplyAction

操作の応答メッセージの SOAP アクションの値を取得または設定します。

TypeId

派生クラスで実装されている場合は、この Attributeの一意の識別子を取得します。

(継承元 Attribute)

メソッド

名前 説明
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)

適用対象