ユーザがいつか生成されるファイルを要求する操作を実装する必要があります(2〜4分)。その後、ユーザーはASP.NETを優先してファイルをダウンロードする必要があります(ブラウザのダウンロード機能を利用するため)。指定されたユーザーのみがこのファイルをダウンロードできます。ここでWCFでファイルを生成し、アクセス許可付きでASP.NET経由でダウンロードします。
は、私はそれを実行しようとしました方法です:
まず、私は二重WCFサービスを構築しました。ユーザーは必要なデータでコールし、ファイル生成を開始し、コールバックチャネルを通じて進捗状況を通知します。最後に、サービスはユーザーにファイルをダウンロードするために使用するURLのトークンを送信することになっています。この部分はうまく動作します。
ファイルに直接アクセスできないように、ファイルをasp_dataフォルダの一時フォルダに保存しました。それから、トークンを受け取るaspxページを作りました(それが何であれ)。それは現在のユーザーと定義された有効期限に対して検証し、応答をファイルに置き換えます。
その後、物事は乱雑になりました。私は、WCFを介してトークンを生成し、それをクライアントに返し、ダウンロードページへのアクセスに使用する正しい方法を知らない。私は2つの異なるアプローチを試してみましたが、私は両方であきらめていると思う:
は、ファイルのGUIDを生成します(ユーザー情報と有効期限付き)FormsAuthenticationTicketの内側にそれを暗号化し、それをクライアントに送ります。クライアントはチケットの暗号化された文字列をダウンロードページのトークンとして使用し、チケットのユーザーを現在のチケットと照合し、有効期限を確認し、guidを抽出してファイルを送り返します。問題は、生成された暗号化された文字列が本当に大きくなり、URLで使用できなくなることです。
ファイルのGUIDを生成し、httpcontextセッションのチケット(検証データとファイルへのパスを含む)に保存します。 wcfサービスはguidをクライアントに渡します。クライアントはこのGUIDを使用してダウンロードページにアクセスします。ダウンロードページはセッションをチェックし、チケットを取得し、ファイルを提供します。問題は、WCF操作でセッションにアクセスする際に問題が発生していることです。ユーザーがファイルを要求すると、サーバーはスレッドを開始してファイルを生成し、コールバック呼び出しを行い、最初のサーバー呼び出しは何も返しません。成功したファイルの生成が完了すると、コールバックスレッドはセッションにアクセスし、チケットを保存し、 'FinishOperationXXX'コールバックでGUIDをユーザーに返します。私はセッションにアクセスすることはできませんが、それはコールバックスレッドが利用できなくなったようです。
私はこれを行うためにデータベースを使用したくない、と私はWCF自体throughtファイルのダウンロードを避けるためにしようとしているが、私はこの作業を取得する必要があります。私は何とかそれをすることができると思いますが、私は不思議です:
私はこれをやっているのですか? 誰かが同じように何かを実装する手掛かりを持っていますか?
まあ、それは確かに動作します。私はまだ全体の問題のためのより組織化された解決策があるかどうかを知りたいが、今のところこれで十分だろう。 –
申し訳ありません私はあなたがFormsAuthenticationTicketで何をしているのか分かりません。たぶんその部分についての別個の疑問が、その主題についてより多くの光を放つだろうか? (あなたは2種類の認証ユーザー*と*クライアント/サーバーセッションが必要ですか?そのユーザーの他のログインはファイルにアクセスできませんか?) –