2011-12-03 10 views
0

私はワークフローサービスを開発したいと思います。 WWF - Windowsワークフローサービスに関する初心者のためのシンプルなデザイン決定

  1. 私は新しいレコードがimageABC.jpgに 状態を言ってDBに挿入されている
  2. 画像へのサービスにURLを送信します:
  3. を「保留」

    私は何をやっていることは以下のとおりです。サービスは画像をダウンロードしてファイルシステムに保存します

  4. サーバーは画像上で作業を開始できるときに、 ステータスを「処理を開始」に更新します
  5. サービス(時間のかかる )画像
  6. サービスは は、DBテーブル
  7. サービスで「完了」する画像処理ジョブと更新状況を終了にいくつかの画像処理を行うには、へのURLと応答を送信します画像

質問: は、私は、ユーザーが呼び出すことができることを確認することができますどのように

を(私は資源が限られているので、共有ホスティング使用しています)コンピュータが同時に複数の画像に対して画像処理を行いたいですサービスとサービスはステップ1を実行します、2,3(これは極端に時間のかかるものではないので)、前の画像が処理を終了するまで待つのではないでしょうか?

私に助言をしてください。私は新しくて学びました。 ありがとうございます。

PS:ステータスのDBをインターゲーティングすることで、クライアントがイメージのステータスを確認できるようにします。これをワークフローサービスに組み込むことはできますか?これを行う必要がありますか、それとも別のサービスにする必要がありますか?

+0

ワークフローは.netの特定のテクノロジであり、この用語を使用すると混乱する可能性があります(このテクノロジはWWFと呼ばれます)。 –

答えて

0

どちらかを同期または非同期で処理します。あなたが何を混合物のように私に言うかについて説明しています。

一度にすべての処理を実行できるため、すべての処理が完了するまでクライアントを強制的に待機させることができます。また、クライアントが呼び出すことのできるさまざまなメソッドを提供することもできます。

public enum DownloadStatus{ 
    Pending, 
    Processing, 
    Done, 
} 

public class YourService: IYourServiceInterface 
{ 
    public Guid SubmitDownload(string imageUrl)... 

    public DownloadStatus GetStatus(Guid downloadId) ... 

    public byte[] GetResult(Guid downloadId)... 

} 

お客様のクライアントはサービスにダウンロードを送信します。サービスはimageUrlをステータスPendingとしてデータベースに保存します。スケジュールされたタスク(基本的に別のアプリケーション)は、すべての保留中のタスクを読み込み、ダウンロードを開始し、すべてのダウンロードタスクをProcessingとマークします。スケジュールされたタスクが画像をダウンロードして処理したら、結果をどこかに保存します(あなたが主張している場合はファイルに保存されます)。ステータスは ...に設定されます。 GetStatusメソッドを呼び出して、現在のステータスのサービスをポーリングします。ポーリング間隔は、ジョブがダウンロードして画像を処理するのに必要な時間に合わせて調整する必要があります。クライアントがステータスをGetStatusから受信すると、クライアントはGetResultを呼び出してイメージを取得できることがわかります。

+0

一度に1つのイメージしか処理されないことを確認するにはどうすればよいですか?一度に複数のイメージをファイルシステムに保存できますか? – Ryan

0

メッセージキューを使用して画像処理を実装します。ファイルをサーバーにアップロードしてディスクに保存し、データベースにレコードを挿入し、キューにメッセージを挿入してファイルをキューに入れます。キューからイメージを一度に1つずつ処理し、データベース内のファイルステータスの更新が完了すると、イメージを処理します。

関連する問題