You can use WCF's Streaming Mode. From that page:
To stream data, the OperationContract for the service must satisfy two requirements:
a. The parameter that holds the data to be streamed must be the only parameter in the method. For example, if the input message is the one to be streamed, the operation must have exactly one input parameter. Similarly, if the output message is to be streamed, the operation must have either exactly one output parameter or a return value.
b. At least one of the types of the parameter and return value must be either Stream, Message, or IXmlSerializable.
Streaming must be enabled on the binding. You set a TransferMode property, which can take one of the following values:
a. Buffered,
b. Streamed, which enables streaming communication in both directions.
c. StreamedRequest, which enables streaming the request only.
d. StreamedResponse, which enables streaming the response only.
There are some decent examples on that page as well, including how to write back a custom stream (it's toward the bottom).
For more background info on encoding, streaming and sessions, and some security considerations when using streaming, see this MSDN page.