You can do it, you'll just need to bump up the MaxReceivedMessageSize, maxBufferSize, maxBufferPoolSize, and potentially others - keep bumping them up until you're successful.
This will permit large files to be sent and received, but you need to open up both ends to expect it.
You can also use a Binary message encoding (if you're not already), even in Silverlight. This will result in smaller messages than plain text.
For example:
<binding name="ObjectServicePortBinding" closeTimeout="00:01:00" openTimeout="00:01:00" receiveTimeout="00:30:00" sendTimeout="00:01:00" maxBufferSize="1048576" maxBufferPoolSize="5242880" maxReceivedMessageSize="52428800" transferMode="Buffered" useDefaultWebProxy="true">
<readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384" maxBytesPerRead="4096" maxNameTableCharCount="16384" />
<security mode="None">
<transport clientCredentialType="None" proxyCredentialType="None" realm="" />
<message clientCredentialType="UserName" algorithmSuite="Default" />
</security>
</binding>
Edit:
Streaming of data may be the more appropriate approach:
- Streamed: Both in and out messages are streamed
- StreamedRequest: Messages sent from client to server are streamed
- StreamedRespone: Only messages returned from the server to the client are streamed
- Buffered: This is the default of buffering all data and sending it in one burst
http://msdn.microsoft.com/en-us/library/ms731913.aspx
Buffered transfers hold the entire message in a memory buffer until the transfer is complete. A buffered message must be completely delivered before a receiver can read it.
Streamed transfers expose the message as a stream. The receiver starts processing the message before it is completely delivered.