Загрузка файла с потоковой передачей WCF, крошечные чтения из потока
Я реализовал загрузку файлов с использованием потоковой передачи WCF. Все работает, как и ожидалось, однако я столкнулся с одной проблемой: я выделяю 4 КБ буфера для чтения из входящего потока, но WCF читает только 255 байтов. Вот моя функция загрузки:
public UploadResponse UploadFile(FileDto fileDto)
{
using (var inStream = fileDto.FileStream)
using (var outStream = new FileStream("OutFile.txt", FileMode.Create))
{
var buffer = new byte[4096];
int count;
while ((count = inStream.Read(buffer, 0, buffer.Length)) > 0)
{
outStream.Write(buffer, 0, count);
}
}
return new UploadResponse {DocumentId = -1};
}
Только 255 байт читает в этой строке: while ((count = inStream.Read(buffer, 0, buffer.Length)) > 0). Есть ли какие-либо настройки, которые я могу изменить, или я делаю что-то не так?
2 ответа
Я думаю, что у тебя была та же проблема, что и у меня. Я решил это здесь: загрузка файла через WCF медленнее, чем через IIS
Выложите свои конфиги, если можете, пожалуйста. Конфигурация должна указывать значения по умолчанию или переопределенные значения, как показано ниже:
<binding name="FileTransferServicesBinding"
maxReceivedMessageSize="1048576" messageEncoding="Mtom">
<readerQuotas maxArrayLength="1048576" maxBytesPerRead="1048576"
maxNameTableCharCount="1048576" maxStringContentLength="1048576"> </readerQuotas>
</binding>
Попробуйте этот MSDN Link, парень упоминает, что у него была та же проблема с получением только 255 байтов, у него есть помеченный ответ, и, кажется, он решает его проблему. Говорится:
"Чтобы передать поток методу WCF, параметр Stream должен быть единственным параметром в операции (или в теле сообщения)..."