0

私は、Web サービス用の Web ベースのクライアントを作成するタスクを与えられました。

私はそれをc#で構築し始めました | .net 4.0 | MVC3 (必要に応じて 4.5 を使用できます)

彼らの応答の一部が非同期であることがわかるまでは、簡単なことのように聞こえました。これがフローです...メソッドを呼び出すと、リクエストが有効かどうかを知らせる ack または nack の応答が返されます。ack 応答では、要求したデータを含む非同期応答を予期する必要があります。これは、要求で指定したコールバック URL に送信されます。

ここに私の質問があります:

  1. Web アプリを構築して localhost:{portnum} でデバッグしている場合、どうすればそれらにコールバック URL を与えることができますか?

  2. すでに応答 (ack/nack) を受信して​​いて、関数の実行が終了した場合、クライアントへの接続は終了していませんか? 次に、データをクライアントに戻すにはどうすればよいですか? 私の唯一の考えは、おそらくsignalRのようなものを使用することですが、それは顧客の購入フローにとっておかしいようです.

  3. 彼らの応答を Webhook のように扱う必要がありますか? リッスンするだけで、最初のリクエストを認識しない別のものを構築します。データをデータベースに保存してから、webhook から送信された一意の ID のレコードが存在するまで最初のリクエストを while ループさせます。

これは本当に私の脳を傷つけています:-/

どんな助けでも大歓迎です。記事、ベスト プラクティス、何でも。

前もって感謝します。

4

2 に答える 2

0

サービス参照を作成すると、*ServiceMethod*Completed デリゲートが生成されます。イベント ハンドラーを登録して、データを処理します。

ServiceMethod _Async() メソッドを使用してサービスを呼び出します。

于 2013-07-11T22:00:10.533 に答える
0

私はあなたの質問を次のように認識しましたが、これについて間違っている場合は修正してください。

1) データで満たされたパラメーターを使用して、エンドポイントに要求を送信します。さらに、次のものを送信します。

リクエストで指定したコールバック URL。(あなたの質問から引用)

2) 彼らは (願わくは) あなたの有効なリクエストに対して ack を送信します

3) 彼らは最終的に完成したデータを (指定した) コールバック URL に送信します。

この流れだと、特にこちら側の作戦に時間がかかることも珍しくありません。それでは、何らかのメソッドがあるとしましょう。それを HandleResponse(data) と呼びます。これを同期的に実行するつもりだった場合 (Web の世界ではめったに発生しません)、おそらく HandleResponse( http-webservice-call-tothem ); を呼び出したはずです。

代わりに、HandleResponse への呼び出しを開始しているのは彼らであるため、/myapp/givemebackmydata/{data} のようなルートを Web アプリに設定し、それを HandleResponse にフックする必要があります。次に、それらへのコールバック URL を /myapp/givemebackmydata/{data} として指定します。ハンドラーへの POST リクエストの本文としてそれを送信するか、URL の一部を実際のデータに文字列置換するかは、さらに情報がないとわかりません。コールバック URL の {data} を、ドキュメントで規定されているプレースホルダーに置き換えます。ドキュメントはありますか?そうでない場合、これはそれほど役に立ちません。

最後に、データをクライアントに戻すには、できれば AJAX を介して、Web クライアントで何らかのポーリング ループが必要になる可能性があります。これはsetIntervalで実行され、WebサービスがコールバックURLをまだ呼び出しているかどうかの状態を保持するサーバー上のページに定期的にヒットします。複数の人がコールバックを待っている可能性があり、各コールバック URL ヒットが待機中のクライアントの 1 つにマップされるため、リクエストごとに状態を提供する必要があるため、これはより厄介な部分です。これには GUID が適している場合があります。

ところで、興味深い質問です。

于 2013-07-11T22:31:47.783 に答える