Клиент WCF - только первые 255 байтов потока, возвращаемых из службы WCF, содержат значения

StackOverflow https://stackoverflow.com/questions/3695541

Вопрос

Мне было поручено посмотреть после приложения ASP.NET WebForms, который связывается с службой WCF, размещенной службой Windows. Привязка, используемая для службы, является NettCPBINDING.

Служба открывает методы для загрузки и загрузки «файлов». Пользователь выбирает для загрузки файла и HTTPPOSTFILE.INPUTSTEAM передается непосредственно на службу в качестве параметра в методе службы «Загрузить». Сервис сохраняет поток как массив байтов к базе данных [Тип данных поля базы данных - varbinary (Max)].

Файл загрузки потока данных по существу является обратным процессом. Байты извлекаются из базы данных; загружен в MemoryStream в службе WCF; а затем вернулся в веб-приложение.

Я захватил данные, содержащиеся в потоках (отправленные / полученные) на каждом шаге в вышеуказанных операциях - на клиенте (веб-приложении) и службе. Я провожу и записал в плоский файл байты, содержащиеся в каждом потоке.

Массив байтов в каждом случае является идентичным [байтовым значением; и количество байтов в потоке], за исключением операции загрузки файла. В точке, когда поток возвращается в веб-приложение из службы WCF. Здесь количество полученных байтов является правильным, но заполняется только первые 255 байт. Значения оставшихся байтов равны нулю

Я сделал множество экспериментальных изменений в ценностях связывания - как в клиенте на службе - как я считаю, что проблема должна лежать здесь. На сегодняшний день я не повлиял на статус байтов, возвращаемых любым способом. Журналы для клиента и услуги не показывают, что любые исключения брошены или любые другие проблемы.

У меня нет большого опыта установки правильных комбинаций связывания (и других конфигураций) атрибутов для клиентских и серверных приложений - полагаясь по умолчанию в прошлом. Нам нужна сервис и клиент, который будет настроен для передачи максимально допустимого размера файла. К сожалению, я не могу использовать MTOM.

Этот Сообщение и ссылки, не предложили мне никакого понимания. До сих пор я не нашел другой информации, которая помогает.

Надеюсь, кто-то может помочь мне с тем, что может быть проблема. Ниже привязки, которые я использую:

Клиент [web.config]:

  <bindings>  
         <netTcpBinding>
            <binding name="TCP"  
                       closeTimeout="00:01:00" 
                       openTimeout="00:10:00"
                       receiveTimeout="00:01:00" sendTimeout="00:01:00" 
                       transferMode="Streamed" 
                       maxBufferPoolSize="512"
                       maxBufferSize="2147483647" 
                       maxConnections="10" 
                       maxReceivedMessageSize="2147483647">     

               <readerQuotas maxDepth="32" 
                             maxStringContentLength="2147483647" 
                             maxArrayLength="2147483647"
                             maxBytesPerRead="4096" 
                             maxNameTableCharCount="2147483647" />
               <reliableSession ordered="true" inactivityTimeout="00:10:00"
                 enabled="false" />
               <security mode="Transport">
                  <transport clientCredentialType="Windows" protectionLevel="EncryptAndSign" />
                  <message clientCredentialType="Windows" />
               </security>
            </binding>
         </netTcpBinding>

Услуга:

<netTcpBinding>
        <binding name="netTCP"
                 closeTimeout="00:01:00"
                 openTimeout="00:01:00"
                 receiveTimeout="00:01:00" sendTimeout="00:01:00"
                 transferMode="Streamed"
                 listenBacklog="30"
                 maxBufferPoolSize="512"
                 maxBufferSize="2147483647"
                 maxConnections="30"
                 maxReceivedMessageSize="2147483647"
                 portSharingEnabled="true">
          <readerQuotas maxDepth="32"
                        maxStringContentLength="2147483647"
                        maxArrayLength="2147483647"
                        maxBytesPerRead="4096"
                        maxNameTableCharCount="2147483647" />
        </binding>
      </netTcpBinding>
Это было полезно?

Решение

Дурак я. Я думаю, что у меня это есть.

Привязки были в порядке. Я не имел дело с чтением байтов правильно из потока в буфер на клиенте.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top