2009-09-04 11 views
0

私はWebページを持っています.pdf reportsを生成するリンクがあります。ユーザーがリンクをクリックすると、pdf生成プロセスが開始されます。生成されたpdfのファイルサイズは巨大な(> 15MB)ユーザーは、このように&を待つことができない彼の他のactivities.Thatは、以下の同時物事が今AJAX&Cを使用してオンザフライでPDFを作成する#

  1. PDF生成プロセスは、ユーザーがブラウジングを続行
  2. 衰えることなく続けて起きてしまうことを進めて続行する必要があります何も衝撃を与えずに
  3. pdf生成が完了したら、ダウンロードリンクを含む電子メール。

基本的な実装は、AJAXを使用してレポートボタン

  • を生成する上

    1. ユーザーがクリック私はC#の関数の呼び出しがgenerateReport(言う作る)

    問題

    です
    1. これを行うと、ユーザーは実行できません全体のプロセスそれまでは&ない限り、何も彼がどのように私はthis.Iドットネット(フレームワーク2.0)開発者です達成んまだ

    を実施して取得理由はAJAX呼び出しの別のリンクではなく、無応答でクリックすることができcompletes.Ofcourse C#を使用してaspx Webページを作成します。私は通常のASP.NET Webアプリケーションでポストバックを取り除くためにjavascript & AJAX(AjaxPro)を使用します。

  • +0

    ここにデータベースがありますか?作成したPDFを保存する場所が必要です。 – jcollum

    +0

    いいえデータベースはありません。しかし、どうすればdtabaseを使うことができますか? – Janmejay

    答えて

    2

    このような場合は、PDF生成コードを別のサービスに分割して、AJAXコードと連携してPDF作成を開始することを検討してください。サービスがPDFファイルを作成すると、サービスはユーザーに関連情報を電子メールで送信できます。

    AJAXコードは、リモーティングを使用してサービスと通信します。

    +0

    別のサービスを作成するにはどうすればいいですか? – Janmejay

    +0

    Windowsサービスタイプの新しいプロジェクトを作成する必要があります。ここでは、サービスでリモーティングを使用する例を示します。 http://www.codedblog.com/2007/09/01/calling-a-windows-service-from-aspnet-via-remoting-ipcchannel/ –

    1

    レポートを作成してユーザーに電子メールで送信するというコンセプトは良いことです。

    この実装は、クライアント側では非常に簡単です。つまり、レポートを作成する必要があることを示す基本的な呼び出しです。つまり、これをテーブル(レポートキュー)に保存する

    レポートの実際の作成は、フロントエンドからの呼び出しによって直接起動されてはなりません。レポートキューを経由して実行されるサービス(Windowsサービス)を作成します。 PDFファイルを生成して電子メールを送信します。

    追加オプションとして、PDFが破壊されていないと仮定すると(つまり、電子メールのみのソリューションではない)、クライアントでajaxポップアップを作成して、レポートページにアクセスして既に生成されたファイルをダウンロードできます。

    0

    関数isReportDone()へのAJAX呼び出しをタイマーで試みると、PDFのリポジトリが順番にチェックされます。 PDFを生成するためには、通常のリクエスト - レスポンススレッドからそのタスクを渡す必要があると思います。それを処理するには、別個のスレッド(マルチスレッドは楽しい)を呼び出すか、サーバー上の別個のサービスにデータを渡します。

    これはちょうど私が強制的にダウンロードしなければならなかったDBからファイルを生成するのと同様の問題がありました。私は、データを応答ストリームに書き込んだ別々のウィンドウで、別々のページを呼び出すことになりました。顧客のネットワークがすべてのポップアップをブロックするまで実際にはうまくいった。レポートを生成するために

    0
    1. ユーザーが求めて
    2. ページGeneratePdf(引数)への非同期サービス呼び出しをキックオフ(ボタンをクリック)。
    3. Pdfが生成されている間に、何らかの種類のスピナーが表示され、何かが起こっていることがわかります。
    4. Pdfが生成されます(iTextSharpが便利です)。
    5. Pdfはどこかに保存されています。データベースblobフィールドは理想的です。つまり、Webサービスは新しいファイルのIDを返すことができます。それに失敗した場合は、ファイル名をajaxコードに戻します。
    6. ウェブサービスの非同期(see this one)イベントが発生すると、ajaxコードはポップアップを投げたり、新しいページにリダイレクトしたりします。多分あなたはスピナーを "Ready!"に置き換えたいでしょう。リンク。
    7. pdfレポートファイルへのリンクは、ユーザーに電子メールで送信されます。
    +0

    ドロップ3 6. 0加算値。 –

    関連する問題