2012-03-12 4 views
4

私は非常に大きなファイルのダウンロードをサポートしているWCFサービスを作成し、非常にいくつかの問題があります。私はすべてのMESSAGESIZEとbufferSizeのがInt32.MaxValueをする属性を増やし、ストリーミングにtransferMode属性を設定する方法についてのガイドをたくさん読んでいると、まだ私は運を持っていません。 (私はまた、MessageBodyMember属性を介してメッセージ本文としてストリームを返しており、メタデータはMessageHeader属性を使用してヘッダー経由で送信されます)。WCFとWebClientを組み合わせた非常に大きなファイル(8GB以上)をダウンロードしますか?

私はすべてのこれらの属性を設定した場合、私は細かい小さなファイルをダウンロードすることができますが、私は1〜2ギガバイトのファイルをダウンロードしようとすると、私は単純にデバッグにかなりハードにそれを作る400不正な要求エラーを...取得

私のサービスは少なくとも8GBのファイルサイズをサポートするのが理想的です。これはWCFでも可能ですか? web.configファイルのさまざまなmessageSize属性は、最大ファイルサイズが2GBに等しいInt32.MaxValueに制限されているようです。私は私が代わりにWebClient.DownloadFileを使用する必要があります思われることを発見した私の研究から

。 ファイルは、必要な権限を持つユーザーにのみダウンロードできるようにする必要があります。 WCFを使用すると、私のダウンロードメソッドは、ユーザが要求されたファイルをダウンロードする権利を持っている場合にのみサーバがチェックしてストリームを返すトークンパラメータを取ることができます。これは、WebClientアプローチを使用して単純には思われません。誰かが(WebClient経由で)これを行う方法に関するいくつかのガイドラインを持っているなら、私は非常に感謝します。

理想的には私のWCFサービスは、管理およびユーザートークンを提供し、何とかトークンは、現在の法律であるか、すべての個々のファイルに結合しなければならない(トークンは一度のみ使用可能でなければなりません)。 WebClient経由でダウンロードが行われます。任意の手掛かりを事前に

感謝。

+3

* WCF経由でこれを行う必要がありますか?ブラウザ/ IISは、これを「普通の古いファイル」としても問題ありません。あなたはURIを返すだけでブラウザがそれを取得できるでしょうか?はい、あなたはWCF経由でこれを行うことができますが、はるかに簡単にその車輪を再発明することはできません。 –

+0

@CraigStuntz:まあ、はいといいえ。学校のプロジェクトの一環として、クライアントアプリケーションが呼び出すことができるWCFサービスをまとめる必要があります。このサービスは、ユーザーがメディアファイルを購入してダウンロードできるメディアプロバイダです(したがって、大きなファイルをサポートする必要があります)。私はストリームを介したファイル転送の経験があるだけなので、ユーザーがIISを使用して何らかの認証を提供していれば、何らかの形でファイルをホストできるかどうかわかりません。 –

+0

もちろん、クエリ文字列パラメータに一意で推測できないトークンが必要です。 IIS/ASP.NETの通常の方法でアクセスを制限できます。 –

答えて

2

あなたは、WCFでこれを行うことができます。多くの月前に私はこれをしたサービスを構築しました(私たちの設定の一部としてWebサーバーはありませんでした)。

http://msdn.microsoft.com/en-us/library/ms733742.aspx

大きなペイロードに対処するための戦略がストリーミングされています。私たちは、WCFのストリーミングを使用しました。特にXMLで表現されたメッセージ は、比較的コンパクトなデータパッケージ と一般に考えられていますが、メッセージは ギガバイトの倍数であり、 データパッケージ以上の連続データストリームに似ている可能性があります。 バッファモードではなくストリーミングモードでデータを転送する場合、送信者は受信者がストリームの形でメッセージ本文 を利用できるようにし、 インフラストラクチャメッセージを送信者から受信者 利用可能です。

関連する問題