2

WebサービスAをコーディングし、WebサービスBを呼び出しています。

AIへの入力を検証したら、成功コードを返し、 Bを呼び出します。

私が考えている方法:

  • Aが戻った後に完了するワーカースレッドを生成できるかどうかを確認します。
  • エージェントまたはサービスをコーディングしてBを呼び出し、信頼できるキューを使用して検証済みのパラメーターを転送します。

ランタイムコンテキストは、ASP.NETWebアプリによってホストされるService.svcです。

これはどのようにすればよいですか?

更新:答えはすべて役に立ちました。使用したものにマークを付けることにしました。

4

4 に答える 4

2

AI への入力を検証したら、成功コードを返し、B を呼び出します。

この場合、作業を永続的なキュー (MSMQ、Azure Bus など) に配置してから、成功コードを返す必要があります。別のシステム (ASP.NET でホストされていないもの。つまり、Azure ワーカー ロール、Win32 サービスなど) は、キューから作業を取得し、B を呼び出す必要があります。

これが信頼できる唯一の方法です。Phil Haack は、ASP.NET で両方の部分を実行することがなぜ悪い考えなのかについて、良いブログ投稿をしています。それはリサイクルに帰着します。リサイクル トリガーの詳細については、こちらこちらをご覧ください。

于 2013-03-06T05:00:50.273 に答える
2

Code Project のこのリンクは、Windows Communication Foundation との安定した非同期通信を作成するために必要なすべての情報を提供します。

この形式のコミュニケーションの取り扱いが多い本:

  • WCF ステップ バイ ステップ
  • 多層フレームワークにおける WCF

うまくいけば、それは役に立ちます。いくつかの例を挙げたいと思いますが、Code Project のチュートリアルは必要なものだけを提供するはずです。

于 2013-03-06T00:08:53.610 に答える
1

この質問は、特定のサービス インターフェイスに固有のものではありません。一般に、何かを非同期で呼び出す理由によって決定が異なります。

  1. 長時間実行される 1 つのメソッド呼び出しに対してクライアントに迅速な応答を提供するだけの場合は、非同期メソッドを呼び出して、後でタスクの進行状況を確認するために使用できるトークン (タスク ID など) をすぐに返します。
  2. 実行する実行時間の長いメソッドがいくつかあり、主に非同期で呼び出して並列処理によって効率を上げたい場合は、最初にできることは何でも呼び出し、前のメソッドに依存しない他のすべてのことを続けます。返された結果が完了するのに必要なタスク、または後続のタスクが開始されるのを待ちます。
  3. これらの状況のほとんどで、ステータス トークンを使用して同期メソッドと非同期メソッドのどちらかをクライアントに選択させます。続行したい場合は、後でもう一度確認できます。続行する前にその結果を取得することが重要な場合は、それもオプションです。

これらへのアプローチは、後続のフレームワーク リリースが 3.5 を超えるたびに簡単になります。C# で非同期タスクの結果を開始、移動、および/または待機する方法の詳細について、他の回答が良い洞察を与えてくれると信じています。

于 2013-03-06T01:20:57.690 に答える
1

あなたの 2 番目のアイデアは良いアイデアです。非同期部分を Windows サービスに送信します。信頼性が必要な場合は、メッセージ キューを使用してください。いずれの場合でも、WCF を使用して要求を他のサービスに送信できます。

于 2013-03-06T00:59:38.417 に答える