OperationContractAttribute.IsOneWay プロパティ
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
操作が応答メッセージを返すかどうかを示す値を取得または設定します。
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 エラーをクライアントに送り返すことができます)。応答メッセージの作成とディスパッチを取り消すには、 IsOneWay を true に設定するしかありません。
一方向メソッドは、値を返したり、 ref または out パラメーターを持つ必要はありません。それ以外の場合は、 System.InvalidOperationException 例外がスローされます。
操作が一方向の操作であることを指定することは、応答メッセージがないことを意味します。 接続できない場合、または送信メッセージが非常に大きい場合、またはサービスが受信情報を十分に高速に読み取ることができない場合は、ブロックすることができます。 クライアントで非ブロッキング呼び出しが必要な場合は、 AsyncPattern 操作を生成します。 詳細については、「 One-Way サービス と WCF クライアントを使用したサービスへのアクセス」を参照してください。