Загрузка файла с потоковой передачей WCF, крошечные чтения из потока

Я реализовал загрузку файлов с помощью потоковой передачи WCF. Все работает как положено, однако столкнулся с одной проблемой: я выделяю 4kb буфер для чтения из входящего потока, но 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). Можно ли изменить какие-то настройки или я что-то не так делаю?


person andrew_m    schedule 20.10.2009    source источник
comment
не могли бы вы опубликовать свою конфигурацию wcf   -  person Shiraz Bhaiji    schedule 21.10.2009
comment
и договор на обслуживание тоже пожалуйста - спасибо!   -  person marc_s    schedule 22.10.2009
comment
Вы нашли решение?   -  person Musfiqur rahman    schedule 05.03.2014


Ответы (2)


Если можно, выложите свои конфиги. В конфигурации должны быть указаны значения по умолчанию или переопределенные значения, как показано ниже:

    <binding name="FileTransferServicesBinding"
    maxReceivedMessageSize="1048576" messageEncoding="Mtom">
      <readerQuotas maxArrayLength="1048576" maxBytesPerRead="1048576"
    maxNameTableCharCount="1048576" maxStringContentLength="1048576"> </readerQuotas>
    </binding>

Попробуйте эту ссылку MSDN парень упоминает, что у него была такая же проблема с получением только 255 байтов, у него отмечен ответ, и он, кажется, решает его проблему. Здесь утверждается:

"Чтобы передать поток методу WCF, параметр Stream должен быть единственным параметром в операции (или в теле сообщения)..."

person Tanner    schedule 20.10.2009
comment
Я не пробовал readerQuotas. Спасибо за образец. Я попробую и вернусь с результатами. - person andrew_m; 20.10.2009
comment
Однако значение по умолчанию для maxBytesPerRead равно 4096, поэтому я не уверен, что это будет проблемой. - person Drew Marsh; 20.10.2009
comment
Проверьте ссылки в моем сообщении здесь: stackoverflow.com/questions/898168/ - person Tanner; 21.10.2009
comment
Я пытался установить maxBytesPerRead и другие квоты на более высокие значения, но безуспешно. Тем не менее WCF читает только 255 байт из входящего потока. Я нашел эту ссылку forums.asp.net/p/1359234/2803427.aspx. Похоже такая же проблема. - person andrew_m; 21.10.2009

Думаю, у вас была та же проблема, что и у меня. Я решил это здесь: Загрузка файла через WCF медленнее, чем через IIS

person Greg Smalter    schedule 03.12.2010