1

私は、正常に動作しているWebサービスを呼び出すac#wcf Webサービスとac#クライアントを持っており、以下のようなシナリオがあり、その方法を理解できません。

これはケースです.1番目の方法は時間がかかり、wcf Webサービスからの応答に時間がかかるため、クライアントは何が起こっているのか分からないため、c#クライアントに2つの方法があります。そのため、ステータスを与える2番目の方法を実装しました最初のメソッド呼び出しの (最初のメソッドには合計 10 のタスクがあり、現在 1 または 2 または 3 などを実行しているとします)。最初のメソッドがまだ完了しておらず、両方のメソッドが同じクライアントにある必要があるため、2 番目のメソッドへの呼び出しがどのように行われるかわかりません。誰でもこれを手伝ってもらえますか。

4

2 に答える 2

2

この種の問題を解決する最善の方法は、タスクを複数の異なる WCF メソッドに分割し、呼び出しを連鎖させることです。例:

これを行う代わりに(単なる概念実証):

serviceClient = new MyWCFClient();
serviceClient.TaskThatTakesForeverCompleted += (s,e) => { /*I'm done !*/ };
serviceClient.TaskThatTakesForeverAsync();

あなたはこれを行うことになります:

serviceClient = new MyWCFClient();
serviceClient.FirstTaskCompleted += (s,e) => { /*first task done!*/ serviceClient.SecondTaskAsync(); };
serviceClient.SecondTaskCompleted += (s,e) => { /*and so on... */ };
...
serviceClient.FirstTaskAsync();

サーバー側では、次のように実装します。

[OperationContract]
public <return type> FirstTask() { /* code */}
[OperationContract]
public <return type> SecondTask() { /* more code */ }

もちろん、これはあなたのケースには当てはまらないかもしれませんが、非常に長いタスクはこのように分割できます。

警告: この種の実装は、固定された順序で呼び出さなければならない一連のメソッド (FirstTask が最初で、次に SecondTask というように) を呼び出す必要があるため、間違いなくベスト プラクティスではありません。最後に、サービスが何をしているかを知るという問題を処理します。

理解するよりも説明する方が本当に難しいです。必要なのは、少しいじるだけで、非常に簡単なロジックです。

: Async 呼び出しがない場合は、次の方法で有効にします。

  • サービス参照を右クリック
  • 「サービス参照の構成」
  • 「非同期操作を生成する」をチェックし、「メッセージ コントラクトを生成する」をオフのままにして、他のすべてをそのままにします。
  • これで、非同期呼び出しを自由に使用できるようになります
于 2012-06-27T15:34:08.493 に答える
1

私が正しく理解していれば...非同期呼び出しを実装する必要があります。デフォルトでは、WCF のすべての呼び出しは同期的です。

あなたが今持っているのは同期呼び出しです。

  1. メソッド 1 (クライアント) はメソッド 2 (サーバー) を呼び出してタスクを実行します。
  2. Method1 は Method2 が終了するまで長時間待機します
  3. Method1 は Method 2 から true (または何でも) を受け取ります
  4. 方法1は、物事を続けることができます。

必要なものは次のとおりです。

  1. Method1 (クライアント) が Method2 (サーバー) を呼び出す
  2. 方法2

    2.1 リクエストの形式が正しいことを検証する

    2.2 作業工程でスレッドを作成する

    2.3 true を返す (つまり、リクエストをキューに入れました)

    2.4 Method1 はその作業を続行します。

次に、2 つのオプションがあります。

3A。Method2 が終了すると、クライアントの別のメソッドを呼び出して、終了したことを報告します (クライアントでメソッド 3 と言う)。

3B. Method1 は、サーバーの別のメソッド (サーバーの Method4 と言う) にクエリを実行して、x 秒ごとにタスクの進行状況を確認し、画面に表示するか、完了するまで必要なことを行います。

WCF で非同期メソッドを実装する方法については、このMSDN リンクを確認できます。

于 2012-06-27T15:33:50.897 に答える