Я реализовал службу WCF в потоковом режиме для передачи больших файлов через Интернет.
Пока все хорошо.
В целях статистики я хочу записать, сколько времени занимает перевод и какой размер был передан. Размер не имеет значения, но отслеживание времени передачи немного сложнее.
Для моих нужд я реализовал класс DownloadStream, производный от MemoryStream.
Этот класс имеет два события: первое запускается при начале чтения, а второе при завершении чтения. Работает нормально.
http://www.danflash.com/files/code/DownloadStream.txt
Но если клиент (клиент WCF) вызывает метод WCF для получения потока, происходит странная вещь.
На стороне клиента я получаю ссылку на поток и могу читать из нее последовательно. Это означает, что я могу взять время перед чтением из потока и после него и получить длительность передачи.
Но если я попытаюсь сделать это на стороне сервера, весь поток будет прочитан автоматически, прежде чем любой клиент начнет чтение с него. Похоже, что содержимое потока будет скопировано в память.
Есть ли способ отследить время передачи на стороне сервера?