Вы можете сделать это, вам просто нужно увеличить MaxReceivedMessageSize, maxBufferSize, maxBufferPoolSize и, возможно, другие - продолжайте увеличивать их, пока не добьетесь успеха.
Это позволит отправлять и получать большие файлы, но вам нужно открыть оба конца, чтобы этого ожидать.
Вы также можете использовать двоичную кодировку сообщений (если вы еще этого не сделали) даже в Silverlight. Это приведет к меньшим сообщениям, чем простой текст.
Например:
<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:
Потоковая передача данных может быть более подходящим подходом:
- Потоковый поток: входящие и исходящие сообщения передаются в потоковом режиме
- StreamedRequest: сообщения, отправленные с клиента на сервер, передаются в потоковом режиме
- StreamedRespone: только сообщения, возвращенные с сервера клиенту, передаются в потоковом режиме
- Буферизация: по умолчанию буферизируются все данные и отправляются в один пакет.
http://msdn.microsoft.com/en-us/library/ms731913.aspx
Буферизованные передачи удерживают все сообщение в буфере памяти до завершения передачи. Буферизованное сообщение должно быть полностью доставлено, прежде чем получатель сможет его прочитать.
Потоковые передачи представляют сообщение в виде потока. Получатель начинает обработку сообщения до его полной доставки.