Este método é implementado no lado do cliente e é usado para fornecer os dados para processamento a partir de uma fonte personalizada. A implementação desse método deve criar um array de dados e transferir seu controle ao chamador, que então será responsável por liberar a memória após o uso.
Data[out] Este parâmetro se refere aos dados a serem lidos. A implementação desse método deve criar esse array e gravar nele os dados necessários. O chamador é responsável por liberar essa memória quando ela não for mais necessária.Count[in] Este parâmetro especifica o limite máximo do número de bytes a serem lidos.BytesRead[out, retval] Este parâmetro especifica o número de bytes efetivamente lidos (ou seja, o tamanho da memória ocupada pelo buffer Data). Se esse número for maior que 0, o método será chamado novamente até que este parâmetro retorne 0.
A implementação do cliente desse método deve garantir que todas as exceções lançadas dentro do método sejam capturadas e tratadas e que nenhuma exceção seja propagada para fora dele. A propagação de uma exceção para fora do método pode levar a resultados imprevisíveis (como o encerramento do programa).