2011-01-04 4 views
3

ファイルをダウンロードするためにアップデーターサービスと通信するクライアントアプリケーションがあります。アップデータサービスは、それらをデータベースから取得し、WCFを使用してクライアントに送信します。現時点では、WSHttpBindingを使用しているため、セキュリティを利用できます。だから私がダウンロード/送信している最大のファイルは約8 MBで、これは正常に動作します。私は最近、130 MBくらいのファイルで試してみましたが、クライアント上で何も起こりませんでした。ネットワーク使用率はわずか0%でした。ストリーミングを使用する前に、WCFで転送されたバイト数はいくつですか?

私はストリーミングせずにファイルを転送するには大きすぎると考えています(maxReceivedMessageSizeなどは209715200と同じですので、設定が正しいことがわかります)。この問題を解決するには、サービスがBasicHttpBindingを使用するようにして、特定のサイズよりも大きい場合にファイルをストリームすることができます。

私の質問は、WSHttpBindingからBasicHttpBindingとストリーミングに切り替える必要があります。 1つは従うべき標準の何らかの種類ですか?とにかく私の論理は完全に間違っていますか?

答えて

2

通常は、のように厳しい規則や計算式がありません。お客様の状況によってはに依存します。 - これらの発信者のそれぞれがしたい場合は、今

  • ための10人のまたは20の同時発信者を想定し

    • あなたのサービスは、一般的に(自分のスロットリング設定に応じて)同時に複数の発信者にサービスを提供することができます

      はこの考えてみましょうファイルをダウンロードする場合、ストリーミングを使用しない場合は、ファイル全体をWCFサービスのメモリにバッファリングする必要があります。

    So 20人の呼び出し元が同時に100 MBのファイルをダウンロードしようとすると、サーバー側のマシンは2 GBのRAMを同時に使用できるようになります。他のすべての通常のプロセスが実行されていることに加えて、あなたのサーバーでそれを処理できますか?

    この単純な計算では、ストリーミングへの切り替えが理にかなっている場合のサイズ制限が適切であるかどうかを推測できます。

  • +1

    ストリーミングでも、SQLデータベースからファイルを取得しているので、各発信者のメモリに100MBのファイルが必要ではありません(20人の呼び出し元=まだ2GMのRAM)。実際にメモリ内のファイル全体を取得することなく、データベースからクライアントへの「ブリッジ」としてWCFサービスを使用できる方法はありますか?または、何らかの形でメモリにコピーを1つだけ残して、すべての発信者が受信するまでコピーを保持できますか? – Marcus

    1

    marc_sによれば、サイトのアクティビティと使用可能なメモリによって異なります。

    個人的なルールとして、平均サイズが約1Mbに達すると、通常はストリーミングの検討を開始します。 5Mbは私の「必須ストリーム」の制限です。