0

これは現在の機能です:

  1. 私の Web サイトは、ASP.NET Web サービスを同期的に呼び出します。
  2. 私の Web サービスは、データベースにレコードを作成します。
  3. 私の Web サービスは、新しいレコード ID を Web サイトにすぐに返します。
  4. 私の Web サイトは、そのレコード ID をユーザーに表示します。

これはうまくいきました。ステップ 2 の後で、Web サービスが (条件に応じて) 1 ~ 6 個の外部 Web サービスを呼び出すように、機能を追加する必要があります。したがって、次のようになります。

  1. 私の Web サイトは、ASP.NET Web サービスを同期的に呼び出します。
  2. 私の Web サービスは、データベースにレコードを作成します。
  3. 私の Web サービスは、外部の Web サービスを呼び出します。結果をマージしてデータベースに保存します。
  4. 私の Web サービスは、新しいレコード ID を Web サイトに返します。
  5. 私の Web サイトは、そのレコード ID をユーザーに表示します。

この新機能により、Web サイトのリクエストに 10 分かかる場合があります。これが私が新しい機能を実装したい方法です。

  1. 私の Web サイトは、ASP.NET Web サービスを同期的に呼び出します。
  2. 私の Web サービスは、データベースにレコードを作成します。
  3. 私の Web サービスは新しいスレッドを作成し、そのスレッドでメソッドを呼び出します (起動して忘れます)。このメソッドは、外部 Web サービスを呼び出し、結果をマージしてデータベースに保存します。これは別のスレッド上にあるため、実行はステップ 3 を完了する直前にステップ 4 に進みます。
  4. 私の Web サービスは、新しいレコード ID を Web サイトにすぐに返します。
  5. 私の Web サイトは、そのレコード ID をユーザーに表示します。

また、ステップ 3 で作成したスレッドにタイムアウトを設定して、タスクが 10 分以内に終了し、そうでない場合はスレッドを中止する必要があるようにします。

バックグラウンドスレッドであるため、呼び出されない ThreadPool.QueueUserWorkItem を試しました。最初は Thread / Task.TaskFactory は実行可能に見えますが、リクエストごとに新しいスレッドを作成することはベスト プラクティスではないようです。

誰かがステップ3のVB.NETコード/リファレンスを提供できますか? 具体的には、別のスレッドで外部Webサービスを呼び出して、そのスレッドのタイムアウトを設定して忘れますか?

ありがとう

4

1 に答える 1

1
closeTimeout="04:01:00"
     openTimeout="04:01:00" receiveTimeout="04:10:00" sendTimeout="04:01:00"
     allowCookies="false" bypassProxyOnLocal="false"
     hostNameComparisonMode="StrongWildcard"
     maxBufferSize="2147483647" maxBufferPoolSize="2147483647"
     maxReceivedMessageSize="2147483647"
     messageEncoding="Text" textEncoding="utf-8"
     transferMode="StreamedResponse"
     useDefaultWebProxy="true"

バインディングプロパティでこれを試してください。タイムアウト期間を増やし、大きなデータを処理するのに役立ちます(mb)

于 2012-04-19T06:48:50.230 に答える