OperationContractAttribute.IsOneWay プロパティ

定義

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

public:
 property bool IsOneWay { bool get(); void set(bool value); };
public bool IsOneWay { get; set; }
member this.IsOneWay : bool with get, set
Public Property IsOneWay As Boolean

プロパティ値

このメソッドが要求メッセージを受け取り、応答メッセージを返さない場合は true、それ以外の場合は false。 既定値は、false です。

次の例は、3 つの操作を指定するサービス コントラクトを実装するサービスです。 その中の 2 つのメソッドは双方向操作であり、戻り値の内容に関係なく、基になる応答メッセージを呼び出し元に返します。 3 つ目のメソッドは、呼び出し (基になる受信メッセージ) を受信しますが、基になる応答メッセージは返しません。

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

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

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

注釈

IsOneWay プロパティを使用して、操作が応答メッセージを返さないことを指定します。 この種類の操作は、特に双方向の通信での通知またはイベントスタイルの通信に便利です。 基になる応答メッセージを待機しないため、一方向操作の呼び出し元には、要求メッセージの処理中に発生したエラーを検出する直接的な方法がありません (信頼できるチャネルと一方向の操作を使用するサービス アプリケーションは、チャネル レベルでメッセージ配信エラーを検出できます。詳細については、「 Reliable Sessions Overview」を参照してください)。

クライアントとサーバーが互いに独立して通信する二重 (双方向) サービス指向アプリケーションでは、クライアント チャネルは、そのメソッドで IsOneWay プロパティを使用して、サービスがクライアントへの一方向の呼び出しを実行できることを示すことができます。クライアントでは、この呼び出しをイベントとして処理できます。 サービスは応答メッセージの受信を想定していないため、返信の呼び出しやメッセージは生成されません。

IsOneWay プロパティが false (既定) に設定されている場合は、void を返すメソッドであっても、応答メッセージが返されます。 この場合、インフラストラクチャは、空のメッセージを作成して送信することで、メソッドが戻ったことを呼び出し元に示します。 (この方法を使用すると、インフラストラクチャで SOAP エラーをクライアントに送信できます)。を にtrue設定IsOneWayする方法は、応答メッセージの作成とディスパッチを取り消す唯一の方法です。

一方向メソッドは、値を返すことも、ref パラメーターと out パラメーターのどちらを持つこともできません。これらに該当する場合は System.InvalidOperationException 例外がスローされます。

操作が一方向操作であることを指定することは、応答メッセージが返されないことだけを意味します。 接続できない場合、送信メッセージが非常に大きい場合、またはサービスによる受信メッセージの読み取りに時間がかかりすぎる場合は、ブロックすることができます。 クライアントがブロック不可の呼び出しを必要とする場合は、AsyncPattern 操作を生成してください。 詳細については、「一方向サービス」および「WCF クライアントを使用したサービスへのアクセス」を参照してください。

適用対象