8

WCFメソッドをマークすることの違いは何ですか?

[OperationContract(IsOneWay = true)]

サービス参照を追加するときに属性と非同期操作の生成チェックボックスをオンにしますか?

私が読んだことから、呼び出しの非同期性はクライアント側でのみ定義する必要があるようです。もしそうなら、のポイントは何[OperationContract(IsOneWay = true)]ですか?

現在、WCF メソッドで次のメソッドを実行しています。

 public void UpdateIndex(IndexElement[] indexElements)
    {
        // start the update on a new thread.
        Thread thread = new Thread(() => UpdateIndexThread(indexElements));
        thread.Start();
    }

クライアントのコードでサービス参照を作成し、次のように呼び出します。

indexerClient.UpdateIndex(indexElements);

indexerClientWCF サービスのインスタンスはどこにありますか。

これも機能するはずですか?そうではないようですが、スレッドが完了するのを待ってから戻るようです。

4

1 に答える 1

11

これらは大きく異なります。

概念的なレベルでは、IsOneWay=true は、メッセージング パターンが、たとえば「要求と応答」ではなく「ファイア アンド フォーゲット」であることを示しています。つまり、IOW=true は、クライアントからサーバーへのメッセージはあるが、サーバーからクライアントへの応答がないことを意味します。対照的に、IOW=true 以外のメソッドは、通常、戻り値の型が void (「空」のメッセージなど) であっても、応答メッセージを返します。

非同期パターンは、クライアント コードがどのように動作するかに関するものです。たとえば、戻り値を待ってブロックするかどうかなどです。非同期は「ローカル」のものです。詳細については、このブログを参照してください。同期サーバー用の非同期クライアントまたは非同期サーバー用の同期クライアントを使用できます。WCF は内部で魔法のように動作し、いずれかのプログラミング モデルを提供します。たとえば、要求と応答のメッセージング パターンがあり、「非同期の生成」を使用する場合、生成されたクライアントは、たとえば、非同期を呼び出すことができるメソッドを提供します (たとえば、メッセージを送信し、応答が到着したときにコールバックを取得します)。

したがって、「ローカル プログラミング モデル」には「非同期」を使用し、「ネットワーク上のメッセージング」には IOW を使用します。

あなたの例では、メソッド IOW=true をマークすると、サーバーコードに Thread.Start() の理由がないと思うことに注意してください。WCF がサーバーに与えたスレッド上で作業を行うことができます。

于 2009-12-14T23:32:02.167 に答える