2011-01-31 12 views
1

私はインターネットを介して大きなファイルを転送するためにストリーミングモードでWCFサービスを実装しました。WCFファイルストリーミング - タイミングの問題

これまでのところ、とても良いです。

統計的な理由から、転送にかかる時間と転送されたサイズを記録します。サイズは問題ではありませんが、転送時間を追跡するのはちょっと難しいです。

私の必要に応じて、私はMemoryStreamから派生したDownloadStreamクラスを実装しました。 このクラスには2つのイベントがあります。最初のイベントは開始読み込みによってトリガーされ、2番目のイベントは終了読み込みによってトリガーされます。それはうまく動作します。 http://www.danflash.com/files/code/DownloadStream.txt

しかし、クライアント(WCFクライアント)がWCFメソッドを呼び出してストリームを取得すると、奇妙なことが起こります。 クライアント側では、ストリームの参照を取得し、それを順番に読み取ることができます。つまり、私はストリームから読み終えるまでに時間を取ってから、転送の時間を得ることができます。

しかし、私がサーバー側でそれをやろうとすると、クライアントが読み込みを開始する前にストリーム全体が自動的に読み込まれます。ストリームコンテンツがメモリにコピーされるようです。

サーバー側で転送時間を追跡する方法はありますか?

答えて

0

ペイロードが送信は、送信すべき正しいコンテンツ長ヘッダを可能にするために、検証されるべきペイロード全体を開始する前に、典型的には、メッセージの暗号化が有効になっている場合がある(ペイロードは、暗号化され、メモリにバッファリングされペイロードが送信される前に適用される)、ストリーミング可能なトランスポート暗号化とのコントラスト、MTOM(ペイロードが構築された後に起こる)などの変換を適用したり、クォータを適用することができます。

WCF inspectorを使用すると、これをさらにタイムアップすることができます。