3

私は.net Webサービスを持っています。60 秒かかるタスクを実行し、その後文字列の結果をクライアントに返すメソッドがあります。

一部のネットワーク、特に低帯域幅では、Web サービス メソッドが 60 秒でタスクを実行する前に、40 秒でタイムアウト エラーが発生します。

低帯域幅のネットワークをサポートするために、Web サービスの非同期呼び出しを実装したいと考えています。

非同期 Web サービス呼び出しでは、次の図に示すように、Web サービス メソッドを実行し、Web サービスの結果をメイン スレッドに返すスレッドを使用するアプローチがあります。

ここに画像の説明を入力

しかし、そのスレッドは 1 つの接続を使用するため、このアプローチでは私の問題は解決されません。

別のアプローチが必要です。クライアントのスレッドが webservice メソッドを呼び出し、メソッドがその操作を開始し、タスクが完了すると、1) webservice が応答の準備ができているというメッセージを送信するか、2) クライアントが webservice の応答の準備ができているかどうかを確認します (ポーリングメカニズムだと思います)次の写真。

ここに画像の説明を入力

.net で 2 番目のアプローチを実装するにはどうすればよいですか? 出来ますか?

ありがとう。

4

1 に答える 1

1

データベースにテーブルを作成して、プロセスの状態を保存します。

UniqClientId, ProcessId, StartTime, EndTime and any other state if required.
  1. クライアントは、一意のIDを渡すことによってサーバーにリクエストを送信します。
  2. サーバーは上記のテーブルにプロセスを記録し、プロセスを開始します。
  3. クライアントはサーバーに即座に接続し(アプリケーションに応じて2〜3秒または15〜20秒)、プロセスの完了を確認します。
  4. クライアントは、プロセスが完了したという応答を受け取ると、サーバーに応答の送信を要求します。

その間に、サーバーは次のジョブを実行します。

  1. プロセスが完了すると、EndTimeを上のテーブルに保存します。
  2. 上記の表を確認して、プロセス状態を送信する方法を提供します。
  3. 応答を送信するためのメソッドを提供します。

あなたのサービスが正確に何をしているのかはわかりませんが、プロセスの操作がデータベース上のテーブルを変更するだけの場合、これを実装するのは難しくありません。

于 2012-07-10T10:13:45.900 に答える